在我的应用中,延迟的作业不再在我的服务器上自动运行。它曾经......
当我手动ssh并执行rake作业时:工作
我回复:
*** 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
答案 0 :(得分:1)
打开脚本/控制台并尝试使用Photo.find(9237)。你可能会得到同样的错误。这意味着/某人正在为不存在的记录调用控制器操作。你可以通过使用find_by_id(params [:id])来避免这种情况,如果没有给定id的记录,它将返回nil。还要在if语句中添加一个条件
if @photo.present? && @photo.update_attributes(params[:photo])
答案 1 :(得分:0)
很多感谢Tadas Tamosauskas的帮助,但经过一些研究,我发现问题实际上是使用了delayed_jobs。发生了什么事情,当我部署到集群服务器时,服务器在我的ey-cloud上覆盖了我的食谱,以便对delayed_jobs进行初始化。因此推迟的工作从未启动过。这些工作从未开始过。更新了配方,重新部署,一切都是hunky dory。