如何使用env vars在Elastic Beanstalk EB上运行sequelize db:migrate?如何在容器命令中访问.env变量?

时间:2017-01-30 02:32:22

标签: node.js amazon-web-services elastic-beanstalk sequelize.js

如何使用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"

3 个答案:

答案 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

它为我工作!