我正在尝试从其他任务执行rake db:test:prepare
。
namespace :db do
namespace :populate do
desc "Seed development database"
task development: :environment do
puts "Kill local server"
%x{ ps xauwww | grep -i --regex="[t]hin" | awk '{print $2}' | xargs kill }
puts "Resetting development database"
Rake::Task['db:reset'].execute
puts "Migrating development database"
Rake::Task['db:migrate'].execute
puts "Populating development database"
Rake::Task['db:populate'].execute
puts "Pepare test database"
Rake::Task['db:test:prepare'].execute
puts "Start local server"
system 'thin -d start'
end
…
end
使用invoke而不是execute无济于事。如果我自己定义它似乎工作正常:
task example: :environment do
Rake::Task['db:test:prepare'].execute
end
当我运行rake db:populate:development
时,除了Rake::Task['db:test:prepare'].execute
之外,所有任务都会运行。该命令的开发日志中没有活动,但它不会阻止下一个任务运行(启动服务器)。通常,当我单独运行db:test:prepare
时,我会看到一些SQL语句。
注意:
$ rails -v
Rails 3.2.2
$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]
$ uname -a
Darwin hook 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64
答案 0 :(得分:1)
我知道这不是正确的做法,但我遇到了类似的问题并最终使用以下方式调用它:
`rake db:test:prepare`
这是唯一对我有用的方法。
答案 1 :(得分:0)
尝试Rake::Task['db:test:prepare'].invoke
而不是.execute
,以便首先运行相关任务。但它只会在未首先调用任务时调用该任务。
参考:this
答案 2 :(得分:0)
Rake任务可能会到达此行https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364,而ActiveRecord::Base.configurations
为空。此变量在https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L5处设置(请参阅https://github.com/rails/rails/blob/370e1ad3f1f30f955bd781f0ecd113409b8ccf8f/activerecord/lib/active_record/tasks/database_tasks.rb#L21)。
您的database.yml
是否有可能错过当前环境或清除配置的其他内容?