【发布时间】:2020-03-21 22:30:12
【问题描述】:
我最近开始使用 AdonisJS 进行 API 开发。
我正在使用 AWS Elastic Beanstalk 以及 AWS CodeCommit 和 AWS CodePipeline 在每个 git push 上部署新代码。
由于 .env 文件不存在于 git 存储库中,因此我通过 Elastic Beanstalk Web 控制台添加了 env 变量。
但是当我尝试运行node ace migration:run 命令时部署失败。
Activity execution failed, because:
Error: ENOENT: no such file or directory, open '/tmp/deployment/application/.env'
1 Env.load
/tmp/deployment/application/node_modules/@adonisjs/framework/src/Env/index.js:110
2 new Env
/tmp/deployment/application/node_modules/@adonisjs/framework/src/Env/index.js:42
3 Object.app.singleton [as closure]
/tmp/deployment/application/node_modules/@adonisjs/framework/providers/AppProvider.js:29
4 Ioc._resolveBinding
/tmp/deployment/application/node_modules/@adonisjs/fold/src/Ioc/index.js:231
5 Ioc.use
/tmp/deployment/application/node_modules/@adonisjs/fold/src/Ioc/index.js:731
6 AppProvider.boot
/tmp/deployment/application/node_modules/@adonisjs/framework/providers/AppProvider.js:337
7 _.filter.map
/tmp/deployment/application/node_modules/@adonisjs/fold/src/Registrar/index.js:147
8 arrayMap
/tmp/deployment/application/node_modules/lodash/lodash.js:639
(ElasticBeanstalk::ExternalInvocationError)
然后我尝试在每个命令之前添加 ENV_SILENT=true 标志,如 AdonisJS 文档中所述。但这并没有帮助。
然后,我尝试在 S3 存储桶上上传 .env 文件,并在部署期间复制其内容。 但它似乎不起作用,因为我遇到了同样的错误(没有 .env 文件)。
这是我的 .ebextensions 文件夹中的 2 个配置文件
01_copy_env.config(我在这里使用 x-xxxxxxxxxxxx 来保证安全)
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["elasticbeanstalk-us-east-x-xxxxxxxxxxxx"]
roleName:
"Fn::GetOptionSetting":
Namespace: "aws:autoscaling:launchconfiguration"
OptionName: "IamInstanceProfile"
DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
"/tmp/deployment/application/.env":
mode: "000755"
owner: root
group: root
authentication: "S3Auth"
source: https://elasticbeanstalk-us-east-x-xxxxxxxxxxxx.s3.us-east-2.amazonaws.com/variables.txt
02_init.config
container_commands:
01_node_binary:
command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-v10* | head -1`/bin/node /bin/node"
leader_only: true
02_migration:
command: "node ace migration:run"
03_init_seed:
command: "node ace seed"
整个事情唯一有效的时候是我将 .env 文件添加到 git 并与其余代码一起部署它。但这不是要走的路,所以如果有人知道我的问题的解决方案,我将不胜感激。谢谢!
【问题讨论】:
-
尝试添加新变量:
ENV_SILENT = true -
我实际上是通过将该标志添加到 package.json -> scripts -> start 来解决它。然后在弹性 beanstalk 环境配置中,我添加了 npm run start 作为 node 命令来启动 nodejs 应用程序。
-
好的好的。我为下一位观众添加了答案。您可以验证或更改它吗?
标签: node.js deployment environment-variables amazon-elastic-beanstalk adonis.js