我正在使用 Prawn 从我的控制器生成 PDF,当直接在 url 访问时,它可以完美运行,IE localhost:3000/responses/1.pdf
但是,当我尝试动态生成此文件以包含在 Mailer 中时,一切都冻结并超时。
我尝试了各种生成/附加文件的方法,但都没有改变结果。
我还尝试修改 Net::HTTP 的超时,但无济于事,它只需要更长的时间才能超时。
如果我在 Rails 控制台上运行这个命令,我会收到一个 PDF 数据流。
Net::HTTP.get('127.0.0.1',"/responses/1.pdf", 3000)
但是如果我在我的控制器中包含这段代码,它就会超时。
我尝试了两种不同的方法,但都反复失败。
方法一 控制器:
http = Net::HTTP.new('localhost', 3000)
http.read_timeout = 6000
file = http.get(response_path(@response, :format => 'pdf')) #timeout here
ResponseMailer.confirmComplete(@response,file).deliver #deliver the mail!
方法1邮寄:
def confirmComplete(response,file)
email_address = response.supervisor_id
attachments["test.pdf"] = {:mime_type => "application/pdf", :content=> file}
mail to: email_address, subject: 'Thank you for your feedback!'
end
上面的代码超时。
方法2控制器:
ResponseMailer.confirmComplete(@response).deliver #deliver the mail!
方法2邮寄:
def confirmComplete(response)
email_address = response.supervisor_id
attachment "application/pdf" do |a|
a.body = Net::HTTP.get('127.0.0.1',"/responses/1.pdf", 3000) #timeout here
a.filename = "test.pdf"
end
mail to: email_address, subject: 'Thank you for your feedback!'
结尾
如果我切换 a.body 和 a.filename,它首先会出错
undefined method `filename=' for #<Mail::Part:0x007ff620e05678>
我发现的每个示例都有不同的语法或建议,但没有解决 Net::HTTP 超时的问题。导轨 3.1,红宝石 1.9.2