我有这个简单的方法来检查URL存在,如果不存在,尝试创建照片对象。
def create_profile_photo(user_id,image_url)
if Photo.find_by_external_url(image_url).blank?
profile_photo = Photo.new
profile_photo.user_id = user_id
profile_photo.picture_from_url(image_url)
profile_photo.save
end
end
# Photo.rb
def picture_from_url(url)
self.external_url = url
self.attachment = URI.parse(clean_url)
end
确实有效。但是当我尝试使用delayed_job
启动方法时它不起作用。
ruby-1.9.2-p290 :085 > MyClass.new.delay.create_profile_photo(347,'http://www.google.com/images/srpr/logo3w.png')
(0.4ms) COMMIT
=> #<Delayed::Backend::ActiveRecord::Job id: 42, priority: 0, attempts: 0, handler: "--- !ruby/object:Delayed::ProfileableMethod\nobject:...", last_error: nil, run_at: "2012-12-08 21:40:06", locked_at: nil, failed_at: nil, locked_by: nil, queue: nil, created_at: "2012-12-08 21:40:06", updated_at: "2012-12-08 21:40:06">
ruby-1.9.2-p290 :085 > Photo.count
(0.3ms) SELECT COUNT(*) FROM "photos"
=> 0
有什么想法吗?
答案 0 :(得分:1)
当然Photo
表中没有photos
个实例。根据您的控制台,您所做的就是将作业排队。
除非您有DJ工作人员在运行,否则您不能指望处理DJ队列。如果未处理DJ队列,则无法运行排队的作业。如果尚未运行排队作业,则不能指望photos
有任何新记录。
运行以下命令,您将看到作业仍在排队等待运行。
Delayed::Job.find(42)
在开发中,运行以下命令启动DJ守护程序。
script/delayed_job
最后,正如@simonmorley建议的那样,请确保在代码更改之间终止并重新启动守护程序,以便通过最新版本的应用程序处理作业。