2012-05-30 16 views
6

ActiveModelキャッシュをサポートしている宝石に問題があります。私がオブザーバをキャッシュモデルに使用しているとき、アプリケーションの初期化中にテーブルを記述してすべてのフィールド名を取得しようとします。私のRailsモデルで現在のレーキタスクの名前を取得するには?

rakeタスクが実行されている場合は、db:migrationも同様です。その場合、いくつかの循環参照エラーがあります。私は現在のレーキタスクを検出して、宝石の初期化をスキップしたいと思いますが、レーキタスクによって呼び出されたコードがどのように見つかったのかわかりません。それを確認するには?

+0

「ActiveModelキャッシングをサポートする宝石の1つ」 - どちらですか? –

答えて

1

あなたがrake taskbundle exec rake task経由であなたのタスクを実行する場合は、するだけで、あなたの初期化子でそれを確認することができます:あなたが好きな場合は、$PROGRAM_NAMEの代わり$0を使用することができます

if $0.end_with?('rake') 
    # rake stuff 
else 
    # non-rake stuff 
end 

11

あなたがしようとしていることを正確には得られませんが、ここではタスク名を取得する例です。

task :testing do |task_name| 
    puts task_name 
    end 
+0

名前空間のタスクをお持ちの場合、これは 'puts task_name.name.split( ':')。last'(rake v10.4.2内)で動作するはずです。 – spyle

8

実行されるタスクのリストである、私は答えはRake.application.top_level_tasksをチェックすることだと思う...この質問は、いくつかの場所を尋ねてきた、と私は答えのいずれかが非常に良かったとは思いませんでした。レイクは必ずしものタスクを実行するだけではありません。

+0

ええ、質問には名前を聞いたことがあり、選択された回答はあなたがレーキの仕事にいるかどうかを検出する方法を示しています。これは正解です。 – method

+0

これは 'do | task name |'を追加するよりもエレガントだと思います。 –

関連する問題