簡體   English   中英

Rails 5.2中的carrierwave_backgrounder asset_tmp無

[英]carrierwave_backgrounder in Rails 5.2 asset_tmp nil

我在表單上有一個圖像上傳器,圖像無需后台處理就可以很好地上傳。 自從移至Heroku以來,較大的源圖像通常會超時,因此我希望將其移至后台作業。 這樣做時,我查看了carrierwave_backgrounder因為它似乎滿足了我的需求。

我找到了carrierwave_backgrounder的叉子,並將其分叉到我自己的倉庫中。 為了得到它在5.2的工作中,作者說他有硬編碼的路徑( https://github.com/lardawge/carrierwave_backgrounder/issues/282https://github.com/lardawge/carrierwave_backgrounder/issues/280

這在store_in_backgroundstore_in_background 僅運行process_in_background在開發中生成本地處理的圖像,但不會將其上載到S3。

有問題的模型字段是issue.image ,這是它在issue.rb的安裝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_asset_mixin.rb方法中的相關方法。 錯誤中提到的第40行是以@tmp_directory開頭的@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_tmp"" ,但是資產,但是我不知道為什么。 debugger逐步執行它,似乎存在record.image,但是record.image_tmp列只是空的,而record.image_cache為nil。

不太確定是否對您有幫助,但我不確定我過去所做的事情:基本上,我創建了一個新員工,可以同時完成這兩項工作。 也許它也可以為您帶來一些想法。

模型:

store_in_background :photo, StoreTmpAndProcessWorker

工人:

class StoreTmpAndProcessWorker < ::CarrierWave::Workers::StoreAsset
  sidekiq_options retry: 1

  def perform(*args)
    Chewy.strategy(:atomic) do
      record = super(*args)
      ::CarrierWave::Workers::ProcessAsset.new.perform(*args)

      photo = Photo.find_by(id: args[1])

      if photo
        scheme = case Rails.env
                 when 'production' then 'https'
                 when 'staging' then 'http'
                 end

        ActionCable.server.broadcast "gallery_#{photo.photable_id}_channel",
          url: BasePresenter.urlify(photo.photo.scaled.url, scheme: scheme), id: photo.id
      end
    end
  end
end

我還對叉子進行了一些更改,但沒有什么特別的地方: https : //github.com/igorkasyanchuk/carrierwave_backgrounder 我的應用程序可用於Rails 5.2。

暫無
暫無

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

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