在弹性beanstalk上运行knex迁移

时间:2015-08-18 20:34:09

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

我只是将我的node.js项目放在弹性beanstalk上并且配置正确。

我现在通过knex插件将应用程序连接到我的RDS postgres DB。

在本地,为了运行knex迁移来更新本地数据库,我只是在控制台“knex migrate:latest”中运行它,但是这对弹性beanstalk不起作用,因为我无法从项目文件夹中运行命令(至少我认为我不能)。

如何在弹性beanstalk应用程序上运行knex命令?

记住,我对弹性豆茎很绿。

3 个答案:

答案 0 :(得分:2)

Elastic Beanstalk将在package.json文件中运行prestartpoststart脚本。

{
    "name": "...",
    "version": "1.0.0",
    "description": "...",
    "scripts": {
        "prestart": "node ./node_modules/knex/lib/bin/cli.js migrate:latest",
        "poststart": "..."
    }
}

或者您可以在启动服务器之前在代码中运行迁移:

knex.migrate.latest([config]) 

答案 1 :(得分:1)

经过数小时搜索过时的SO答案后,我的工作设置如下:

.ebextensions / 01-迁移-db.config

container_commands:
  01_node_binary:
    command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"
    leader_only: true
  02_npm_binary:
    command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/npm /bin/npm"
    leader_only: true
  03_migrate_db:
    command: "sudo DB_HOST=${DB_HOST} DB_PORT=${DB_PORT} DB_NAME=${DB_NAME} DB_USER=${DB_USER} DB_PASSWORD=${DB_PASSWORD} npm run db:migration:run"
    leader_only: true

的package.json

...
scripts: {
  "db:migration:run": "knex migrate:latest"
}

答案 2 :(得分:1)

如果您使用的npm版本大于5.2。它通常带有npx软件包,使您可以从本地项目node modules而不是全局安装的脚本/库中运行脚本/库。这使得直接从项目目录运行knex变得容易。您无需在预安装脚本中全局安装knex软件包。您可以简单地拥有一个节点命令脚本,如下所示:

"scripts": {
  "start": "npx knex migrate:latest && node server.js"
}