我有一个Ruby on Rails应用程序,它生成PDF并将它们保存到/ pdf / ..然后运行延迟的作业将pdf通过电子邮件发送给某人。制作在Heroku上进行。
该过程在本地运行良好,并且过去曾在(相同)生产环境中工作。但是,文件现在没有生成/保存在生产环境中,我无法解决原因。尽管回过头所有的旧提交,但我看不出我改变了什么来阻止文件生成。
文件夹/ pdf存在于应用程序的根目录中。我已确认使用Heroku Bash。
我认为问题出在save_to_file:instruction。
附近延迟的作业工作正常,如果我将附件指向已经存在的文件,它将执行并发送电子邮件。
我知道heroku的文件系统不会保留资产。然而,由于我不希望资产持续存在,我不相信这是一个问题(我可能是错的),我只想生成然后使用并丢弃。
我的路线:
get '/matrices/:matrix_id/submissions/:id/email' => 'submissions#emailpdf', as: :submissions_emailpdf
我的控制器:
def emailpdf
get_submission_details
get_topline_stats
get_brand
render javascript_delay: 2000,
pdf: 'submission',
layout: 'pdf',
template: 'submissions/showpdf.html.haml',
show_as_html: params.key?('debug'),
save_to_file: Rails.root.join('pdf', "submission#{@user.id}.pdf"),
save_only: true
SendpdfJob.delay.perform_later(@user.name, @user.id, @user.email, @matrix.id, @submission.id)
redirect_to matrix_submission_path(@matrix,@submission), notice: "We have emailed you your PDF"
end
我推迟的工作
class SendpdfJob < ActiveJob::Base
queue_as :default
def perform(username, userid, useremail, matrixid, submissionid)
Pony.delay.mail(
:to => useremail,
:from => 'info@digitalmaturity.co.uk',
:subject => 'Your Matrix',
:html_body => '<h2>Hello '+ username+'.</h2>
<p> Your Maturity Matrix is attached. We hope you find this useful.
<p >All the best
:attachments => {
"matrix.pdf" => File.read("pdf/submission#{userid}.pdf")
}
);
end
end
我的日志错误:
Job SendpdfJob.perform_later (id=45) FAILED (8 prior attempts) with Errno::ENOENT: No such file or directory @ rb_sysopen - pdf/submission26.pdf
Heroku bash确认/ pdf
中没有文件非常感谢所有人。
TB