2012-03-19 13 views
7

別のタスクからrake db:test:prepareを実行しようとしています。db:test:別のレーキタスクからの準備

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 

executeの代わりにinvokeを使用すると役立ちません。私が自分自身でそれを定義した場合正常に動作するようです:

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

1

を、私は、これはそれを行うための正しい方法ではないですけど、私は同様の問題を有し、かつ使用して、それを呼び出してしまった。

`rake db:test:prepare` 

これは、その唯一の方法であり、私のために働くように思えた。

0

Rakeタスクがこの行になる可能性がありますhttps://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364ActiveRecord::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に現在の環境がないか、設定を消去する可能性はありますか?

+0

良いアイデアだけど、それはどちらでもない。 'database.yml'が正しく設定されていて、私のカスタムレイクタスクの' ActiveRecord :: Base.configurations.blank? 'をチェックすると' false'が返されます。 – jrdioko

+0

debugステートメントはどこに置いていますか?行の直前に追加してください。https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364? – gwintrob

+0

私はちょうどそれを試み、まだ 'false'を得ました。そして、デバッガを使って、私はステップスルーし、 'unless'節に入っていることを確認しました(そしてそこからRailsの内部構造に足を踏み入れて私があまり理解していない)。 – jrdioko

関連する問題