如何使用env vars在ElasticBeanstalk上运行sequelize db:migrate?
运行sequelize 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
我的package.json包含
"migrate": "node_modules/sequelize-cli/bin/sequelize db:migrate"
答案 0 :(得分:2)
我刚刚发现环境变量正在发生什么。尝试在没有npm
的情况下运行迁移脚本。这将是:
./node_modules/.bin/sequelize db:migrate
这样,您将获得所需的所有环境变量。
您确定您的.env
文件已提交给您的git repo吗?一般来说,将.env
提交给git并在生产中使用它并不是一个好主意。您应该在Software Configuration
下的Elastic Beanstalk仪表板中设置环境变量。
您还可以将eb
命令行实用程序用作documented here。
答案 1 :(得分:1)
不要忘记包含前两个命令,在.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
答案 2 :(得分:0)
我通过在.ebextension / config_file.sh中运行命令来解决此错误 节点控制台在EB控制台中使用的是相同的
个文件: “ /opt/elasticbeanstalk/hooks/appdeploy/pre/config_file.sh”:
import { Tabs, Tab } from "react-bootstrap";
然后
在应用程序目录中的终端上运行命令:
./ node_modules / .bin / sequelize db:migrate
它为我工作!