如何使用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
以解决此问题。