2015-12-22 112 views
0

我正在使用carrierwave將文件上傳到amazon S3和delayed_job_activerecord gem。延遲作業:無法爲非持久記錄創建作業

我有,我產生一個XLSX文件,並將其上傳到Amazon S3的功能,但我得到這個錯誤:

作業不能用於非持續記錄創建:#< Xlsxfiles ID:無,created_at :無,的updated_at:無,xlsxfile:無>

Xlsxfiles是上傳

這裏是我的功能:

def generate_xlsx(content) 

    temp_file = Tempfile.new(['users','.xlsx']) 
    ToXls::Writer.new(content, {:columns => [:name,:address], 
     :headers => ["name","address"]}).write_io(temp_file) 

    temp_file.rewind 
    file = File.open(temp_file) 
    #self.xlsxfile = file 
    self.xlsxfile.store!(file)# 
    #self.write_carrierwave_identifier 
    self.save! 

    end 

    handle_asynchronously :generate_xlsx 

這裏就是我所說的功能可按

def index 
     @users = User.all.page(params[:page]).per(10) 
     respond_to do |format| 
      format.html 
      format.xls { 

       s = Xlsxfiles.new 
       s.generate_xlsx(@users) 

       redirect_to :back 
       } 
      end 
     end 

沒有延遲的工作我的功能工作,並上傳文件到S3, 但是當我使用延遲工作,ActiveRecord的保存之前執行作業,任何解決方案?

+0

你有沒有試過將'self.save!'上傳幾行之前發生? –

+0

您是否需要查看調用generate_xlsx而不是其實現的代碼? –

+0

尼克威伊斯,這不工作! Frederick Cheung,我將使用調用generate_xlsx的代碼編輯我的帖子! – pureofpure

回答

1

從外觀上看,您需要在之前保存Xlsxfile實例,您可以在其上調用generate_xlsx。請嘗試以下操作:

s = Xlsxfiles.create 
s.generate_xlsx(@users) 

您可能需要調整Xlsxfile上的驗證,以便它們允許保存空記錄。

+0

我得到了這個錯誤>無法轉儲匿名模塊:#<模塊:0x007fe7ced84a10>當我使用創建! – pureofpure

+0

試試這個:'@users = User.all.page(params [:page])。per(10).to_a' - 不調用'to_a','@ users'是一個'ActiveRecord :: Relation',不是'User'模型的數組,並且delayed_job可能在序列化一個'ActiveRecord :: Relation'時遇到問題。 –