9

ActiveModelキャッシングをサポートするgemの1つに問題があります。キャッシュされたモデルにオブザーバーを使用している場合、アプリケーションの初期化中に、すべてのフィールド名を取得するためにテーブルを記述しようとします。

db:migrationを含め、rakeタスクが実行されているときにも同じことが行われます。その場合、循環参照エラーが発生します。現在のrakeタスクを検出して、gemの初期化をスキップしたいのですが、rakeタスクを介して呼び出されたコードを見つける方法がわかりません。確認方法は?

4

3 に答える 3

15

私はあなたがやろうとしていることを正確に理解していませんが、ここにタスク名を取得する例があります。

  task :testing do |task_name|
    puts task_name
  end
于 2012-05-30T11:35:28.963 に答える
11

この質問はいくつかの場所で尋ねられましたが、どの答えもあまり良いとは思いませんでした...答えは実行されるタスクのリストであるチェックすることだと思います。Rake.application.top_level_tasksレーキは必ずしも1つのタスクだけを実行するわけではありません。

于 2013-06-26T19:54:56.117 に答える
1

を介してタスクを実行する場合、rake taskまたはbundle exec rake task次の方法で初期化子でタスクを確認できる場合。

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

$PROGRAM_NAME必要に応じて代わりに使用できます$0

于 2012-05-30T11:54:23.997 に答える