延迟作业:无法为非持久记录创建作业

时间:2015-12-22 20:45:06

标签: ruby-on-rails ruby amazon-s3

我正在使用carrierwave将文件上传到亚马逊S3和delayed_job_activerecord gem。

我有一个函数,我生成一个xlsx文件并将其上传到亚马逊S3但我收到此错误:

  

无法为非持久记录创建作业:#< Xlsxfiles id:nil,created_at:nil,updated_at:nil,xlsxfile:nil>

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之前执行,任何解决方案?

1 个答案:

答案 0 :(得分:1)

从它的外观来看,您需要在之前保存Xlsxfile实例,并在其上调用generate_xlsx。请尝试以下方法:

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

您可能需要调整Xlsxfile上的验证,以便它们允许保存空记录。