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

AdonisJS 5部署至DigitalOcean时.env变量缺失问题求助

解决AdonisJS 5部署DigitalOcean时.env变量缺失问题

问题场景

在DigitalOcean的Ubuntu服务器上部署AdonisJS 5 API,进入build目录执行迁移命令时触发E_MISSING_ENV_VALUE错误,提示缺失DB_CONNECTION环境变量,但项目根目录的.env文件已明确声明该变量。

执行命令及错误输出:

gmh@ubuntu-gmh:~/www/gmh-api$ cd build
gmh@ubuntu-gmh:~/www/gmh-api/build$ node ace migration:run --force

  Exception 

 E_MISSING_ENV_VALUE: Missing environment variable "DB_CONNECTION"

.env文件内容:

PORT=3333
HOST=127.0.0.1
NODE_ENV=production
DRIVE_DISK=local

DB_CONNECTION=mysql

数据库配置片段:

connection: Env.get('DB_CONNECTION'),

connections: {
  mysql: {
    client: 'mysql2',
    connection: {
      host: Env.get('MYSQL_HOST'),
      port: Env.get('MYSQL_PORT'),
      user: Env.get('MYSQL_USER'),
      password: Env.get('MYSQL_PASSWORD', ''),
      database: Env.get('MYSQL_DB_NAME'),
    },
  }
}

解决方案

  • 确保.env文件在执行目录
    AdonisJS的Env模块默认从当前工作目录加载.env文件。你在build目录执行命令,但.env可能还在项目根目录。可以:

    1. 复制根目录的.env到build目录:
      cp ~/www/gmh-api/.env ~/www/gmh-api/build/
      
    2. 直接在项目根目录执行迁移(指定build下的ace):
      node build/ace migration:run --force
      
  • 处理生产环境的.env加载逻辑
    当NODE_ENV=production时,AdonisJS默认不会自动加载.env文件(出于安全考虑,推荐用服务器环境变量注入)。如果需要强制加载,可:

    • 执行命令时显式指定.env路径:
      node ace migration:run --force --env-file=../.env
      
    • 或者在代码中手动初始化Env模块时指定文件路径:
      import { Env } from '@adonisjs/core/build/standalone'
      await Env.load(__dirname + '/../.env') // 根据实际路径调整
      
  • 验证环境变量权限与可用性
    先在build目录检查变量是否能被读取:

# 用Shell检查
echo $DB_CONNECTION
# 用Node.js检查
node -e "console.log(process.env.DB_CONNECTION)"

如果输出为空,检查文件权限:

chmod 644 ~/www/gmh-api/build/.env
  • 调整构建配置自动复制.env
    修改adonisrc.json的metaFiles数组,确保构建时将.env复制到build目录:
"metaFiles": [
  ".env",
  // 保留其他已有的元文件配置
]

然后重新执行构建:

node ace build --production

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:05:20