簡體   English   中英

通過delay_job將圖像上傳到heroku

[英]Upload images to heroku through delayed_job

我正在嘗試使用延遲的作業將圖像從Heroku上傳到s3存儲桶。

但是似乎heroku延遲的工作無法獲得tmp圖像路徑。 請讓我知道我在做什么錯或更好的方法。

這是我的控制器代碼:

  if @post.save
    unless @post.post_type == 0
      image_a = image_b = ''
      if item_image_params['0'][:item_type] == "A"
        image_a = item_image_params['0'][:image]
        image_b = item_image_params['1'][:image]
      else
        image_a = item_image_params['1'][:image]
        image_b = item_image_params['0'][:image]
      end
      @post.delay.save_image(image_a.path, image_b.path)
    end
  end

我的模型代碼:

  def save_image(image_a, image_b)
    items.each do |item|
      if item.item_type == "A"
        item.build_item_image.image = File.open(image_a)
      else
        item.build_item_image.image = File.open(image_b)
      end
    end
    if self.save
      File.delete(image_a) if File.exist?(image_a)
      File.delete(image_b) if File.exist?(image_b)
    end
  end

我延遲收到此錯誤:

:save_image args: - /tmp/RackMultipart20150715-3-1qoy83r.jpeg - /tmp/RackMultipart20150715-3-if712h.jpeg 
 last_error:
  "No such file or directory - /tmp/RackMultipart20150715-3-if712h.jpeg\n/app/app/models/post.rb:35:in

在第35行,代碼為:

 item.build_item_image.image = File.open(image_b)

Heroku dynos無法訪問彼此的本地文件系統。 如果我理解正確,則您有一個Web dyno寫入其本地文件系統(/ tmp),然后嘗試從其他(工作者)dyno讀取它。

您最好將上傳直接轉到S3。 我已經成功使用了carrierwave_direct ,也可以使用其他工具或自己動手做。

直接上傳到S3的好處還在於,在上傳過程中不打結您的Web dynos,並繞過它們的超時。 如果上載直接發送到heroku並且花費的時間比Web dyno的超時時間長(因為文件很大或用戶的連接速度很慢),則上載只會失敗。

我看到您已經用paperclip標記了這個問題。 您可能會發現Heroku的這篇文章很有用,盡管它似乎沒有使用直接上傳到s3的首選方法。 這篇博客文章提供了一些示例代碼,可使用回形針直接上傳到s3。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM