【问题标题】:Upload Image to s3 Using DelayedJobActiveRecord使用 DelayedJobActiveRecord 将图像上传到 s3
【发布时间】: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


【解决方案1】:

将延迟作业排队时,gem 必须将执行操作所需的所有数据序列化到数据库中。所以,通常你不想序列化,例如一个完整的对象(例如用户或其他),因为随后用户的所有属性都被序列化到数据库中——这是额外的工作,并且可能在作业运行时提供陈旧的数据!但是,就您而言,听起来您是在要求延迟作业尝试将图像文件序列化到数据库中!哪个,听起来它失败了。 (尝试在调试器中运行image.last["image"].to_yaml,看看你会得到什么!)

因此,要使其在延迟作业中正常工作,您可能需要创建一个 custom Delayed Job 来引用先前存储在文件系统临时位置或类似位置中的图像。这当然是额外的工作......但我认为没有办法解决这个问题。过去我不得不做这种事情来将生成的 PDF 上传到 AWS。

注意:还有一个令人头疼的问题是,当您将图像临时存储到文件系统时,稍后再运行延迟的作业......图像必须存储在与文件系统相同的文件系统中延迟作业运行的那个,否则找不到它!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 2017-04-28
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多