25

有没有办法在开发环境中自动执行rake db:migrate RAILS_ENV=test一次?rake db:migrate

我运行了guardguard-rspec,我对失败的测试感到非常恼火,即使它在浏览器中手动运行也是如此。

每次开发暂停时,我至少要花费 15 分钟,才能弄清楚我只是rake db:migrate:test在更改数据库后忘记调用。

因为我已经在使用guard ,所以我也考虑在项目中添加guard-rake,但我不知道应该看哪个文件。观看development.sqlite3时,rake db:migrate RAILS_ENV=test每次我通过浏览器对我的记录做某事时都会被解雇,所以这不是我真正想要的。

有人可以帮我解决我的问题吗?

4

7 回答 7

19

可能只是在您的.bashrc文件中创建一个命令别名。

~/.bashrc

alias rake_db_migrate='rake db:migrate db:test:prepare'

终端

$ rake_db_migrate
于 2011-08-03T16:36:03.980 回答
4

我使用这个别名:
alias rake_db_migrate='rake db:migrate && rake db:migrate RAILS_ENV=test'

因为rake db:test:prepare已弃用。

我使用它的原因是因为我们的项目使用 pg_search (postgreSQL) 以及 structure.sql (不是 schema.rb) 并且由于某种原因运行rake db:migrate不准备测试数据库。

于 2015-02-04T15:22:15.040 回答
3

我更喜欢这样使用别名:

在你的~/.bashrc

alias migrate='rake db:migrate && rake db:test:prepare'

花 30 分钟试图弄清楚为什么你的测试没有通过只是为了记住你没有重置数据库很容易。这将解决这个问题。

于 2013-05-20T21:59:37.580 回答
2

更快:(alias migrate='rake db:migrate db:test:prepare'在你的 中添加这个.bashrc,它只会加载一次 Rails)

于 2013-10-21T19:29:01.197 回答
2

我非常喜欢的一个选项是在另一个 rake 脚本中覆盖实际任务。这将在运行迁移后自动调用。像这样,我总是在迁移数据库后创建一个 ERD 图:

# lib/tasks/database.rake
namespace :db do
  desc 'Additional migrate task that creates the diagram'
  task :migrate do
    if Rails.env.development?
      Rake::Task['diagram:erd'].invoke
    end
  end
end

所以在你的情况下:

# lib/tasks/database.rake
namespace :db do
  desc 'Additional migrate task that creates the diagram'
  task :migrate do
    `rake db:migrate RAILS_ENV=test`
  end
end

另一种方法是运行以下命令,将新模式克隆到测试数据库:

rake db:migrate db:test:clone
于 2014-06-12T07:21:10.623 回答
0

在回答您最初的使用问题时guard-rake,您可以观看db/schema.rb,因为每当您迁移数据库时都会更新。但是,如果您进行回滚,此文件也将被更改,因此您可能必须从架构定义行中提取迁移版本db/schma.rb或使用rake db:test:prepare而不是rake db:migrate RAILS_ENV=test.

看起来这很脆弱,所以使用 shell 别名可能是更好的方法。我只是希望有更好的方法!

于 2013-10-08T19:36:28.310 回答
0

如果您想将其作为一种行之有效的单线器,则可以将其设置为:

echo "alias rake-migrate='rake db:migrate && rake db:migrate RAILS_ENV=test'" >> ~/.zshrc && source ~/.zshrc

对于回滚,有:

echo "alias rake-rollback='rake db:rollback && rake db:rollback RAILS_ENV=test'" >> ~/.zshrc && source ~/.zshrc

然后,只需在终端中运行

rake-migrate

或者

rake-rollback

注意:这将为~/.zshrc文件添加别名。 注意2::如果你这样做,比如终端1,并使用另一个终端选项卡或vscode终端,那么只需source ~/.zshrc在你想要运行它的终端上运行

于 2021-08-10T14:46:25.250 回答