【问题标题】:Delayed Job: job cannot be created for non-persisted record延迟作业:无法为非持久记录创建作业
【发布时间】:2016-03-29 04:59:58
【问题描述】:

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

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

无法为非持久化记录创建作业:#

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, 但是当我使用延迟作业时,作业在保存活动记录之前执行,有什么解决方案吗?

【问题讨论】:

  • 您是否尝试过在上传之前将self.save! 向上移动几行?
  • 您不需要查看调用 generate_xlsx 的代码而不是其实现吗?
  • 尼克维斯,这行不通! Frederick Cheung 我将使用调用 generate_xlsx 的代码编辑我的帖子!

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


【解决方案1】:

从外观上看,您需要在调用generate_xlsx 之前保存Xlsxfile 实例之前。请尝试以下操作:

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

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

【讨论】:

  • 我收到此错误 > 无法转储匿名模块:#<0x007fe7ced84a10>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2015-06-21
  • 1970-01-01
  • 2012-04-20
  • 2018-05-31
  • 2016-03-29
  • 1970-01-01
相关资源
最近更新 更多