我只是将我的node.js项目放在弹性beanstalk上并且配置正确。
我现在通过knex插件将应用程序连接到我的RDS postgres DB。
在本地,为了运行knex迁移来更新本地数据库,我只是在控制台“knex migrate:latest”中运行它,但是这对弹性beanstalk不起作用,因为我无法从项目文件夹中运行命令(至少我认为我不能)。
如何在弹性beanstalk应用程序上运行knex命令?
记住,我对弹性豆茎很绿。答案 0 :(得分:2)
Elastic Beanstalk将在package.json文件中运行prestart
和poststart
脚本。
{
"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"
}