【问题标题】:AdonisJS app deployment on AWS ElasticBeanstalk using AWS CodePipeline fails - missing .env使用 AWS CodePipeline 在 AWS ElasticBeanstalk 上部署 AdonisJS 应用程序失败 - 缺少 .env
【发布时间】:2020-03-21 22:30:12
【问题描述】:

我最近开始使用 AdonisJS 进行 API 开发。 我正在使用 AWS Elastic Beanstalk 以及 AWS CodeCommitAWS 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


【解决方案1】:

在全局变量上添加新变量 ENV_SILENT = true (Elastic Beanstalk)

Adonis documentation

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 2019-04-07
    • 2020-09-15
    • 2019-08-20
    • 2021-08-07
    • 2013-07-24
    • 2019-04-16
    • 2015-03-03
    • 2021-04-09
    相关资源
    最近更新 更多