You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Directus 10.10部署Azure无服务器MSSQL启动崩溃问题排查

Directus 10.10 Azure容器部署崩溃问题解决与调试

核心问题分析

你遇到的两个关键问题:

  • directus_extensions表重复添加id列导致启动崩溃
  • 空数据库被判定为“已初始化”

这些问题主要源于无服务器MSSQL的冷启动特性、Directus迁移脚本的兼容性,以及容器按需启动带来的重复初始化冲突。


修复与调试步骤

1. 清理异常数据库状态

  • 登录Azure无服务器MSSQL,删除已创建的所有Directus系统表(包括directus_extensions、directus_migrations、directus_settings等),让数据库回到完全空的状态。
  • 如果无法全量删除,至少删除directus_migrations表,这个表记录了迁移执行状态,异常记录会导致Directus重复执行同一迁移。

2. 修正初始化误判问题

  • 检查Azure文件存储挂载的/extensions目录,确保里面没有残留旧的扩展文件或配置。挂载卷中存在的旧扩展可能让Directus误判数据库已完成初始化。
  • 确认Directus环境变量DB_INITIALIZE=true已正确设置,确保空数据库能触发完整初始化流程。

3. 适配无服务器MSSQL配置

添加以下环境变量到Azure容器应用:

  • DB_MSSQL_ENABLE_CONNECTION_POOLING=false:禁用连接池,避免无服务器DB的会话状态异常干扰迁移。
  • DB_MIGRATIONS_LOCK_TIMEOUT=30000:延长迁移锁超时时间,应对无服务器DB的冷启动延迟。
  • LOG_LEVEL=debug:开启详细日志,便于跟踪迁移执行过程。

4. 优化容器按需启动逻辑

  • 将Azure容器应用的最小副本数设为0,最大副本数设为1,避免多实例同时启动触发迁移冲突。
  • 修改Directus启动命令为:sleep 10 && npx directus start,给无服务器MSSQL预留10秒冷启动时间,确保数据库连接稳定后再执行初始化。

5. 调试日志排查

  • 查看Azure容器应用的完整日志流,通过debug级别的日志定位到具体失败的迁移脚本。
  • 重点关注Applying Marketplace...之后的日志,确认是哪个迁移步骤尝试重复添加id列。

SDK查询优化建议

针对容器冷启动的延迟,给SDK查询添加重试逻辑,避免第一次请求失败:

import { createDirectus, rest, readItems } from '@directus/sdk';

const client = createDirectus('http://my-azure-instance.whatever-from-microsoft.com/api').with(rest());

async function getFaqs() {
  let retries = 3;
  while (retries > 0) {
    try {
      return await client.request(
        readItems('faqs', { fields: ['id', 'title'] })
      );
    } catch (error) {
      retries--;
      if (retries === 0) throw error;
      await new Promise(resolve => setTimeout(resolve, 2000));
    }
  }
}

内容的提问来源于stack exchange,提问作者Dario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:53:10