如何使用 db-migrate 删除和重新 运行 迁移

how to drop and re-run migrations with db-migrate

我正在尝试在 运行 所有测试之前为数据库播种。所以我创建了一个新文件 bootstrapTest.js 并将其包含在我的测试源文件中,如下所示 gulp.src(['test/bootstrapTest.js', 'test/**/*.js']

bootstrapTest.js 现在需要重置数据库并重新运行 迁移和播种数据。所以我创建了一个子进程并让它 运行 一个 shell 脚本 (seed.sh)。

`const exec = require('child_process').exec;
exec('./seed.sh', 
    {env: {database__host: 'localhost', database__user: 'username', 
    database__port: 3306, database__password: 'password'}}, function 
    (error, stdout, stderr) { ...
}`

这就是我的 seed.sh 的样子

#!/bin/bash ./node_modules/.bin/db-migrate reset --env test echo '## Database truncated' ./node_modules/.bin/db-migrate up --env test echo '## Database migrated'

在控制台的输出中,我只看到了回显输出,没有看到 运行 的命令。我已经验证确实 db-migrate 不是 运行ning.

知道为什么 db-migrate 不是 运行ning 吗?当我从我的 zsh 手动 运行 时,它工作正常。

想出了一个更好的方法来达到相同的结果。在开始测试之前,我没有通过 shell 脚本 运行 添加它们,而是将它们添加到我的 package.json 脚本和 运行 该脚本中。所以我的 package.json 看起来像这样 "scripts": { "testdb": "db-migrate reset --env test && db-migrate up --env test", "test": "npm run testdb && ./node_modules/.bin/gulp" }

假设,你是运行节点npm start

可以使用 npm hooks.

进行 db 迁移
"scripts" : {
    "prestart":"db-migrate reset --env test && db-migrate up --env test",
    "start" : "node server.js",
    "poststart" :"echo 'do after server run'"
  },

简而言之,

$. npm start //command fired on terminal

//output
  1. npm preinstall //first to run

  2. npm start //now this

当你这样做时,npm start,在它之前 prestart 脚本将被执行,然后 start 脚本。