3

私はsite5.com共有ホスティングでdelayed_job(tobiとcollective_ideaの両方を試しました)を使用しており、乗客をレール環境として使用しています。私はなんとか仕事を成し遂げることができた。ただし、プラグインは最初の実行後にジョブクラスのソースコードの変更を無視しているようです。変更のたびにサーバーを再起動しましたが(touch tmp/restart.txt)、それでも無視されます。

例:

ファイル:lib/xx_job.rb

class XxJob
  def perform
    Rails.logger.info "XX START"

    TempTest.delete_all

    i = 0
    10.times {
      i+=1
      TempTest.create(:name => "XXX")
      sleep(1)
    }

    Rails.logger.info "XX END"
  end
end

単純なコントローラーでは、次のように呼び出します。

Delayed::Job.enqueue(XxJob.new)

私が集めた結論:

  1. xx_job.rbをxx_job1.rbに変更した場合-コントローラーのエラー
  2. クラスXxJobをクラスXxJob1に変更した場合-コントローラーのエラー
  3. すべてのperformメソッドのコンテンツを削除すると、古いコードの古いコードが実行されます
  4. クラスを含む新しい.rbファイルを実行し、このクラスをエンキューします-完全に機能します
  5. その新しいファイルの実行および実行ジョブで何かを変更すると、古いコードが実行されます

すべての変更の間に、サーバーを再起動しました。Passengerまたは他の何かがクラスキャッシュを保存しているようです。

このキャッシュを削除するにはどうすればよいですか?サーバーのどこかに保存されていますか?(共有ホスティングからアクセスできるといいのですが)

ありがとう!

4

2 に答える 2

2

結局、私は理解しました-何人かの労働者がバックグラウンドで走っていて、彼らのそれぞれが仕事を捕まえて、彼ら自身のキャッシュを持っていました。それらを殺す方法がわからなかったので、テーブルの名前を数秒間変更しました。それは彼らを殺しました:)

次に、 https://github.com/tobi/delayed_job/wiki/Running-Delayed:: Worker- as-a-daemonをワーカーの開始として使用しました。これはうまく機能します。

于 2009-12-29T15:18:10.713 に答える
2

デーモン化された遅延ジョブワーカーを実行する場合は、コードをリロードするためにそれらを再起動する必要があります。また、各ワーカーが独自のレールのインスタンスをロードすることにも注意してください。

于 2011-06-26T06:13:53.167 に答える