[英]Executing db:test:prepare from another rake task
我正在嘗試執行rake db:test:prepare
從另一個任務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
之外,所有任務都會運行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
我知道這不是正確的方法,但我遇到了類似的問題,並最終使用以下方法調用它:
`rake db:test:prepare`
這是唯一對我有用的方法。
嘗試Rake::Task['db:test:prepare'].invoke
而不是.execute
,以便它首先運行相關任務。 但它只會在未首先調用任務時調用該任務。
參考: 這個
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
是否有可能缺少當前環境,還是清除配置的其他內容?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.