0

私は遅れた仕事の初心者ですが、ローカルでは宝石は完璧に機能しています。本番環境では、gem はdelayed_jobs テーブルにエントリを記録し、ミリ秒以内にエントリを完了し、処理せずに削除します。

私が見つけた重要な違いは、データベースに作成されたハンドラー エントリでした。

ローカル

--- !ruby/object:Delayed::PerformableMethod
object: !ruby/ActiveRecord:User
 attributes:
 id: '1'
 email: abc@example.com.au
 is_pending: pending
method_name: :job_without_delay
args:
- false

ヘロク

--- !ruby/object:Delayed::PerformableMethod
attributes:
 id: 1
 email: abc@example.com.au
 is_pending: pending

何が起こっている?誰でも助けてもらえますか?

コントローラ

def make_pending
@user = current_user
@user.job(false)
redirect_to user_path(current_user)
end

ユーザーモデル

def job(silence)
Project.job(self.id, silence)
end
handle_asynchronously :job, :run_at => Proc.new { 5.minutes.from_now }

もう一つの違い

ローカル ログ

[Worker(host:__.local pid:5179)] Starting job worker
[Worker(host:__.local pid:5179)] User#job_without_delay completed after 417.0975
[Worker(host:__.local pid:5179)] 1 jobs processed at 0.0024 j/s, 0 failed ...

Heroku ログ

013-01-14T12:15:37+00:00 app[worker.1]: [Worker(host:19edbbfb-b8b9-4528-bca6-46ecac4e66bc pid:2)] NilClass# completed after 0.0119
2013-01-14T12:15:37+00:00 app[worker.1]: [Worker(host:19edbbfb-b8b9-4528-bca6-46ecac4e66bc pid:2)] 1 jobs processed at 26.9897 j/s, 0 failed ...
4

1 に答える 1

0

最終的に解決策が見つかりました

新しいモデルdj.rbを追加しました

class Dj < Struct.new(:uid, :silence)

  def perform
......
  end
end
于 2013-01-14T14:10:45.507 に答える