【发布时间】: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