0

私のアプリでは、サーバー上で遅延ジョブが自動的に実行されなくなりました。以前は..

手動で ssh して rake ジョブを実行すると:work

私はこれを返します:

*** Starting job worker host:ip-(censored) pid:21458
* [Worker(host:ip-(censored) pid:21458)] acquired lock on PhotoJob
* [JOB] host:ip-(censored) pid:21458 failed with ActiveRecord::RecordNotFound: Couldn't find Photo with ID=9237 - 4 failed attempts

これは、複数のジョブであると思われるものに対して、約 20 倍以上になります。次に、これらのいくつかを取得します。

* [Worker(host:ip-(censored) pid:21458)] failed to acquire exclusive lock for PhotoJob

そして最後に、これらのいずれか:

12 jobs processed at 73.6807 j/s, 12 failed ...

私が熟考すべきことはありますか?本当にありがとう!

編集 :

遅延ジョブを呼び出すフォト コントローラーは次のとおりです。

def update
   @gallery = @organization.media.find_by_media_id(params[:gallery_id]).media
   @photo = @gallery.photos.find(params[:id])

   if @photo.update_attributes(params[:photo])
      @photo.update_attribute(:processing, true)
      logger.info "HERE IS PROCESSING #{@photo.processing}"
      Delayed::Job.enqueue PhotoJob.new(@photo.id)
      respond_to do |format|
         format.html do 
            if params[:captions_screen] == 'true'
               logger.info "WE ARE GOING TO DO NOTHING AT ALL"
               render :text => ''
            else
               redirect_to organization_media_url(@organization) 
            end
         end
         format.js { redirect_to organization_media_url(@organization) }
      end
   else
      render :action => 'edit'
   end
end
4

2 に答える 2

1

スクリプト/コンソールを開き、Photo.find(9237)を試してください。おそらく同じエラーが発生します。これは、何か/誰かが存在しないレコードに対してコントローラーアクションを呼び出していることを意味します。これを回避するには、find_by_id(params [:id])を使用します。これは、指定されたIDのレコードがない場合にnilを返します。また、ifステートメントにもう1つの条件を追加します

if @photo.present? && @photo.update_attributes(params[:photo])
于 2010-05-30T07:26:54.973 に答える
0

Tadas Tamosauskas の協力に感謝しますが、いくつかの調査の結果、問題は実際にはdelayed_jobs にあることがわかりました。何が起こったのかというと、クラスター サーバーにデプロイしたときに、サーバーが ey-cloud のレシピを上書きして、delayed_jobs を初期化しました。そのため、遅延したジョブは起動しませんでした。ジョブは実行されませんでした。レシピを更新し、再展開し、すべてがハンキードーリーです。

于 2010-05-30T13:00:07.650 に答える