1

メインスレッドから切り離された本番サーバーで実行されるrakeタスクのセットがあり、バックグラウンドで発生します

ここにそれを実行するコードがあります

def vehicle
    @estate = Estate.find(@estate_id)
    @date_string = @login_month.strftime("%m%Y")
    system("rake udpms:process_only_vehicle[#{@date_string},#{@estate_id}] &")
    redirect_to :controller => "reports/error_messages", :message => "Processing will happen in the background and reports will be refreshed after two minutes", :target => "_blank"
  end

このコードをurl経由で実行すると、rakeタスクが実行され、本番マシンでアクティブなプロセスを確認するとわかりますが、約10秒後に突然終了します。

ps axl | grep rake

これはそれが示している

ruby /usr/local/rvm/gems/ruby-1.8.7-p352/bin/rake udpms:process_only_vehicle[082012,5]

ターミナルの app フォルダで同じ rake タスクを実行すると、エラーなしで実行されます。これは、開発マシンで問題なく実行されます。(OSX)。サーバーはミントです。Rake のバージョンはどちらも同じです。gem のバージョンは 1 つだけです。

実動サーバーであるため、ログはありません (produciton.log 以外にはありません)。この問題のデバッグ方法に関するヘルプは大歓迎です。

4

1 に答える 1

1

これはおそらく、サーバー ソフトウェアが応答に 10 秒以上かかる要求を取得するために発生しています。rake タスクを開始しているにもかかわらず、そのsystem呼び出しが実行されるまで待機する必要があります。時間がかかる場合、タスクは終了し、サーバー ワーカーはワーカー プールに戻ります。

より一般的な意味で、これはバックグラウンドでタスクを実行する適切な方法ではありません。タスクをキューに入れ、バックグラウンドで実行するResqueまたはDelayed Jobを使用することをお勧めします。

于 2012-08-06T16:17:58.300 に答える