0

我剛剛從carrierwave_backgrounder切換到carrierwave_direct。我有carrierwave_direct設置和運作。也就是說,主文件正在上傳並可以在視圖中顯示。但是,我的上傳器版本沒有被創建。何時不使用carrierwave_direct處理版本?

以下是我的工作:

class ProcessReceiptJob < ApplicationJob 
    queue_as :process_receipt 

    def perform(expense_id, key) 
    expense = Expense.find expense_id 
    uploader = expense.receipt 
    expense.key = key 
    expense.remote_receipt_url = uploader.direct_fog_url(with_path: true) 
    expense.save! 
    # expense.recreate_versions! 
    end 

    after_perform do |job| 
    expense = Expense.find(job.arguments.first) 
    expense.update_column :receipt_processing, false 
    end 

end 

究竟什麼時候carrierwave_direct處理版本---或者,當carrierwave指示來處理版本?我假設使用expense.remote_receipt_url加載原始圖像,然後調用save!觸發上傳器處理版本。那是對的嗎?

在任何情況下,我的原始圖像通過後臺作業上傳 - 但是,版本不會被創建/上傳。

我是否需要「recreate_versions」甚至認爲他們以前不存在?我是否需要以某種方式在指向源文件之後明確處理版本,還是應該自動處理?

+0

所以,我看到我上面的陳述是正確的。保存!加載遠程文件後的動作將觸發上傳器。我想知道如果我的版本沒有被創建,因爲S3的文件有content_type'binary/octet-stream'... – hellion

回答

0

在分配它之後,我沒有保存模型:在發送後臺工作人員之前,我已經保存了模型。我將密鑰發送給後臺工作人員作爲參數,然後在處理作業時保存模型。這是問題。在文檔中提到需要在分配模型後保存模型:成功操作的關鍵。因此,我不得不update_attributes(key:params [:key]),然後調用我的後臺作業(順便再次保存模型)。