当我运行`bundle exec rake test:prepare`时它出错了,但是`bundle exec rake db:test:prepare`会很好地发出警告.这是怎么回事?

ayj*_*jay 19 ruby ruby-on-rails ruby-on-rails-4

所以根据这个链接,一个是快捷包装器(所以我猜它们是相同的).

当我跑bundle exec rake db:test:prepare,我得到这个错误:

Don't know how to build task 'test:prepare'
/Users/aj/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `eval'
/Users/aj/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `<main>'
Run Code Online (Sandbox Code Playgroud)

......但是当我跑步时bundle exec rake db:test:prepare,我收到了这个警告:

WARNING: db:test:prepare is deprecated. The Rails test helper now maintains your test schema automatically, see the release notes for details.
Run Code Online (Sandbox Code Playgroud)

任何人都可以阐明这一点吗?

Log*_*man 50

在Rails 4.1+中,他们弃用db:test:使用该消息进行准备.你现在可以使用:

ActiveRecord::Migration.maintain_test_schema!

在spec_helper.rb(或类似的文件,如果你没有使用RSpec).这将自动使您的测试数据库与您的架构保持同步.由于这种"自动"方法,在大多数情况下不再需要db:test:prepare.

如果由于某种原因需要手动完成,您仍然可以使用

rake db:schema:load RAILS_ENV=test

  • 当添加迁移,运行测试,然后使用`rake db:rollback`时,潜在的问题`ActiveRecord :: Migration.maintain_test_schema!`无法正常工作,然后更改迁移.然后,它认为架构是最新的,而不是. (6认同)