2015-04-16 45 views
0

這是我的問題。 當我創建新設備時,新版本會添加到我的圖片上傳器中。 然後我運行一個作業爲每個MyModel記錄重新創建文件。 Sidekiq開始工作,但它不創建文件。 我使用ActiveJob來聲明作業。Carrierwave + Sidekiq動態版本問題,在背景中重新創建

此代碼

MakingNewVersionImagesJob.perform_later("some_recently_added_device_name") 

Sidekiq重啓後在控制檯工作正常。 我覺得Sidekiq沒有看到MyModel的變化。 我對不對?這裏有解決方案嗎?

注意:它工作正常,當我在控制器直接做,而不是在後臺

class BaseImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 

    # Config/versions ... 

    def self.add_version(name, width, height) 
    version name do 
     process resize_to_fit: [width, height] 
    end 
    end 
end 


class MyModelImageUploader < BaseImageUploader 
    # blabla 
end 


class MyModel < ActiveRecord::Base 
    #... 
    mount_uploader :image, MyModelImageUploader 
end 


class Device < ActiveRecord::Base 
    after_create :add_uploaders_versions 

    def add_uploaders_versions 
    version = self.name.downcase.to_sym 
    MyModelImageUploader.add_version(version, self.width, self.height) 
    end 
end 


class MakingNewVersionImagesJob < ActiveJob::Base 
    queue_as :regular 

    def perform(version) 
    MyModel.find_each do |record| 
     record.image.recreate_versions!(version.to_sym) 
     record.save! 
    end 
    end 
end 


class DevicesController < ApplicationController 
    #... 
    def create 
    @device = Device.new(device_params) 
    if @device.save 
     MakingNewVersionImagesJob.perform_later(@device.name.downcase) 
     #... 
    end 
    end 
end 

回答

0

我發現Sidekiq/Rails的兩個加載代碼到自己的內存區域,那爲什麼Sidekiq一無所知類的變化導致在Rails方面。

在我的解決方案中,我切換到DelayedJob。它加載一個實際的Rails上下文。

此外,我可以複製MakingNewVersionImagesJob#執行並繼續使用Sidekiq的新版本的定義。