【问题标题】:how to drop and re-run migrations with db-migrate如何使用 db-migrate 删除并重新运行迁移
【发布时间】:2016-07-08 20:33:53
【问题描述】:

我正在尝试在运行所有测试之前为数据库播种。所以我创建了一个新文件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'

在控制台的输出中,我只看到 echo 输出,而不是正在运行的命令。我已经确认 db-migrate 确实没有运行。

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

【问题讨论】:

    标签: node.js npm dbmigrate


    【解决方案1】:

    想出了一个更好的方法来实现相同的结果。我没有通过 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" }

    【讨论】:

      【解决方案2】:

      假设,您正在使用npm start 运行节点。

      可以使用npm hooks 进行数据库迁移

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

      总之,

      $。 npm start //在终端触发的命令

      //output
      
      1. npm preinstall //首先运行

      2. npm start //现在这个

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

      【讨论】:

        猜你喜欢
        • 2020-09-11
        • 2021-02-07
        • 2011-04-30
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多