2012-03-19 37 views
7

我試圖從另一個任務執行rake db:test:prepare執行db:test:從另一個rake任務準備

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 

使用調用而不是執行沒有幫助。這似乎很好地工作,如果我本身定義它:

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

嘗試Rake::Task['db:test:prepare'].invoke代替.execute,所以它首先運行相關的任務。但是隻有在任務沒有被調用時纔會調用該任務。

參見:this

+0

我有同樣的問題,這不能解決它對我來說。 – jrdioko 2013-07-24 18:30:28

1

我知道這是不是這樣做的正確的方式,但我有類似的問題,並最終調用它使用:

`rake db:test:prepare` 

這是唯一的方法似乎爲我工作。

0
+0

好主意,但這不是它。 'database.yml'設置正確,在我的自定義rake任務中檢查'ActiveRecord :: Base.configurations.blank?'返回'false'。 – jrdioko 2013-07-30 03:45:10

+0

你在哪裏放置調試語句?您可以嘗試在https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364行之前立即添加它嗎? – gwintrob 2013-07-30 15:02:39

+0

我剛剛嘗試過,仍然有'false'。通過調試器,我能夠通過並確認它正在進入'unless'子句(並從那裏進入到我不太瞭解的Rails內部)。 – jrdioko 2013-07-30 16:46:19

相關問題