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

时间:2016-03-22 04:38:40

标签: node.js npm dbmigrate

我在尝试运行所有测试之前尝试播种数据库。所以我创建了一个新文件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手动运行时,它可以正常工作。

2 个答案:

答案 0 :(得分:0)

找出一种更好的方法来实现相同的结果。我没有在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" }

答案 1 :(得分:0)

假设您正在使用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预安装 //首先运行

  2.   
  3. npm start //现在开始

  4.   

执行此操作npm start之前,先执行prestart脚本,然后执行start脚本。