如何使用 env vars 在 Elastic Beanstalk EB 上运行续集 db:migrate ?如何在容器



如何使用env vars在ElasticBeanstalk上运行续集db:migrate ?

运行续集迁移失败,因为它找不到.env文件。

{ Error: ENOENT: no such file or directory, open '.env'

我的 master.config 看起来像:

container_commands:
  00_node_binary:
    command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"
  00_npm_binary:
      command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/npm /bin/npm"
  01_migrations:
    command: npm run migrate
    leader_only: true

和我的包.json包含

"migrate": "node_modules/sequelize-cli/bin/sequelize db:migrate"

编辑:

我刚刚发现了环境变量是怎么回事。尝试在不npm的情况下运行迁移脚本。它将是这样的:

./node_modules/.bin/sequelize db:migrate

这样,您将获得所需的所有环境变量。

旧答案:

你确定你的.env文件已提交到你的 git 存储库吗?一般来说,将.env提交到 git 并在生产中使用它不是一个好主意。相反,您应该在 Elastic Beanstalk 仪表板中的 Software Configuration 下设置环境变量。

您还可以使用此处所述的eb命令行实用程序。

不要忘记包含前两个命令,在 .ebextensions 中为我工作的文件 migration.config 如下所示

container_commands:
  00_node_binary:
    command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"
  00_npm_binary:
    command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/npm /bin/npm"
  50-run-database-migrations:
    command: "./node_modules/.bin/sequelize db:migrate"
    leader_only: true

看起来./node_modules/.bin/sequelize使用/usr/bin/env/node,并会给你以下错误:

/usr/bin/env: node: No such file or directory

因为显然节点被称为nodejs...前两个容器命令将处理这个问题。

请参阅 https://github.com/nodejs/node-v0.x-archive/issues/3911 以获取进一步参考

我通过在 .ebextension/config_file.sh 中运行命令来解决此错误节点与 EB 控制台中使用的节点 vsersion 相同

文件:"/opt/elasticbeanstalk/hooks/appdeploy/pre/config_file.sh":

mode: "000755"
owner: root
group: root
content: |
  #!/bin/bash
  
  curl --silent --location https://rpm.nodesource.com/setup_12.x | sudo bash -
  
  sudo yum -y install nodejs
<小时 />

然后

在应用程序目录中的终端上运行命令:

./node_modules/.bin/续集 db:migrate

它为我工作!!

没有一个解决方案对我有用。奏效的是lazartravica在下一页上的回答:

https://github.com/sequelize/sequelize/issues/12913#issuecomment-782254695

TLDR:
不要在部署步骤中运行npm install,这既是安全问题,也是性能问题。在"生成"步骤中运行node_modules/sequelize-cli/lib/sequelize db:migrate以解决此问题。

最新更新