Ruby on rails Rails 5.2资产中的carrierwave_背景资料_tmp无

Ruby on rails Rails 5.2资产中的carrierwave_背景资料_tmp无,ruby-on-rails,carrierwave,carrierwave-backgrounder,Ruby On Rails,Carrierwave,Carrierwave Backgrounder,我有一个表单上的图像上传器,图像上传无需背景处理。由于移动到Heroku,较大的源图像经常超时,所以我希望将其移动到后台工作。在这样做的过程中,我查看了《carrierwave_backgrounder》,因为它似乎涵盖了我需要的内容 我找到了一份carrierwave_backgrounder,我把它交给了我自己的回购协议。为了让它在5.2中工作,作者说他必须硬编码路径(,) 这在将\u存储在\u后台时失败。只在后台运行process\u会在开发过程中生成本地处理的图像,但它们不会上载到S3

我有一个表单上的图像上传器,图像上传无需背景处理。由于移动到Heroku,较大的源图像经常超时,所以我希望将其移动到后台工作。在这样做的过程中,我查看了《carrierwave_backgrounder》,因为它似乎涵盖了我需要的内容

我找到了一份
carrierwave_backgrounder
,我把它交给了我自己的回购协议。为了让它在5.2中工作,作者说他必须硬编码路径(,)

这在
将\u存储在\u后台时失败。只在后台运行
process\u
会在开发过程中生成本地处理的图像,但它们不会上载到S3

所讨论的模型字段是
issue.image
,下面是如何将其装入
issue.rb

# Image attachment via Carrierwave
  mount_uploader :image, ImageUploader
  process_in_background :image
  store_in_background :image
  attr_accessor :image_cache
以下是输出错误:

2019-02-24T01:05:33.168Z 43666 TID-oxnydp4bq CarrierWave::Workers::StoreAsset JID-83163770b014d37186118cf9 INFO: start
2019-02-24T01:05:33.545Z 43666 TID-oxnydp4bq CarrierWave::Workers::StoreAsset JID-83163770b014d37186118cf9 INFO: fail: 0.377 sec
2019-02-24T01:05:33.545Z 43666 TID-oxnydp4bq WARN: {"context":"Job raised exception","job":{"class":"CarrierWave::Workers::StoreAsset","args":["Issue","6355","image"],"queue":"carrierwave","retry":true,"jid":"83163770b014d37186118cf9","created_at":1550970333.167957,"enqueued_at":1550970333.168011},"jobstr":"{\"class\":\"CarrierWave::Workers::StoreAsset\",\"args\":[\"Issue\",\"6355\",\"image\"],\"queue\":\"carrierwave\",\"retry\":true,\"jid\":\"83163770b014d37186118cf9\",\"created_at\":1550970333.167957,\"enqueued_at\":1550970333.168011}"}
2019-02-24T01:05:33.545Z 43666 TID-oxnydp4bq WARN: TypeError: no implicit conversion of nil into String
2019-02-24T01:05:33.545Z 43666 TID-oxnydp4bq WARN: /Users/jathayde/Development/Meticulous/carrierwave_backgrounder/lib/backgrounder/workers/store_asset_mixin.rb:40:in `join'
下面是我本地版本gem中的
store\u asset\u mixin.rb
方法中的相关方法。错误中提到的第40行是以
@tmp_directory
开头的:

      def store_directories(record)
        asset, asset_tmp = record.send(:"#{column}"), record.send(:"#{column}_tmp")
        cache_directory  = File.expand_path(asset.cache_dir, asset.root)
        # @cache_path      = File.join(cache_directory, asset_tmp)
        # # XXX Hardcoded our path here... not ideal..
        @cache_path      = open("https://patchvault.s3.amazonaws.com/uploads/tmp/#{asset_tmp}")
        @tmp_directory   = File.join(cache_directory, asset_tmp.split("/").first)
      end

所以
asset\u tmp
,但我不知道为什么。使用
调试器单步执行它
似乎存在record.image,但record.image\u tmp列只是空的,而record.image\u缓存是空的。

不确定它是否对您有帮助,但我过去所做的是:基本上我创建了一个新的worker,它同时执行这两个操作。也许它也能给你带来一些想法

型号:

store_in_background :photo, StoreTmpAndProcessWorker
工人:

class StoretPandProcessWorker<::CarrierWave::Workers::StoreAsset
sidekiq_选项重试:1
def执行(*args)
策略(:原子)做什么
记录=超级(*args)
::CarrierWave::Workers::ProcessAsset.new.perform(*args)
photo=photo.find_by(id:args[1])
如果照片
scheme=case Rails.env
当“生产”时,则为“https”
当“暂存”时,然后是“http”
结束
ActionCable.server.broadcast“gallery#{photo.photable_id}_频道”,
url:BasePresenter.urlify(photo.photo.scaled.url,scheme:scheme),id:photo.id
结束
结束
结束
结束

我也对我的叉子做了一些改变,但没有什么特别的:。我的应用程序与Rails 5.2兼容。

谢谢Igor!这个周末我要试一试,看看进展如何。我很感激!重新阅读文档并意识到我不应该使用
store\u in\u background
,而应该只使用
process\u in\u background
(Heroku production)。当附加到\u后台中的进程\u时,此工作者是否仍能正常工作?因为它在处理后调用store,所以我希望它能够。另外,你在你的频道做什么?我有一个带有dropzone的表单(我可以上传多个文件)。因此,我可以删除10个文件,看看它们是否正在“处理”。一旦它的处理,我刷新处理预览图像与真实图像。