【发布时间】:2014-07-13 17:06:50
【问题描述】:
我正在尝试使用 DelayedJobActiveRecord 上传图像。但是当我尝试将其添加到 DelayedJob 中时,如下所示
AmazonService.delay.amazon_s3_store_image(image.last["image"], key)
###image.last["image"]
#<ActionDispatch::Http::UploadedFile:0x00000004c0ff40
@content_type="image/jpeg",
@headers=
"Content-Disposition: form-data; name=\"post[images_attributes][0][image]\"; filename=\"GALAXY_SIII_mini_Product_Image4.jpg\"\r\nContent-Type: image/jpeg\r\n",
@original_filename="GALAXY_SIII_mini_Product_Image4.jpg",
@tempfile=#<File:/tmp/RackMultipart20140524-3636-3bt3se>>
### key
"e6368079c2c6cdb4dbdaf6e5c03f2f"
def amazon_s3_store_image(image, key)
BUCKET.objects[key].write(image, acl: :public_read)
url = BUCKET.objects[key].public_url(secure: false)
url.scheme + "://" + url.host + url.path
end
确切的错误消息
NoMethodError: undefined method `name' for nil:NilClass
from /home/awais/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/psych/visitors/yaml_tree.rb:70:in `block in initialize'
我知道如何使用 sidekiq 来完成,但不幸的是我的内存问题较少,因此我想使用 DelayedJob 来完成。
谢谢
【问题讨论】:
-
你能显示异常的完整堆栈跟踪吗?也许还有完整的延迟作业负载对象?
-
@pdobb 更新了我的问题
-
由于这似乎是一个 YAML 问题,我倾向于认为它与您的有效负载对象的反序列化有关。这就是为什么查看有效负载对象(其中包含
perform方法的对象)的代码会有所帮助的原因。无论如何,从这里很难判断...您是否尝试在perform操作中添加调试器以确保 (a) 它进入那里并且 (b)image.last["image"]实际上是您期望的那样? -
@pdobb 我的错我忘了在第一行添加
.delay再次更新 AmazonService.delay.amazon_s3_store_image(image.last["image"], key)
标签: ruby-on-rails ruby-on-rails-4 amazon-s3 delayed-job