私はコントローラからPDFを生成するためにエビを使用しています.URLに直接アクセスすると、問題なく動作します.IE localhost:3000/responses/1.pdf
しかし、メーラーに含めるためにこのファイルをオンザフライで生成しようとすると、すべてがフリーズしてタイムアウトになります。
ファイルを生成/添付するためのさまざまな方法を試しましたが、結果が変わったものはありません。
また、Net::HTTP のタイムアウトを無駄に変更しようとしましたが、タイムアウトするのに時間がかかります。
Rails コンソールでこのコマンドを実行すると、PDF データ ストリームを受け取ります。
Net::HTTP.get('127.0.0.1',"/responses/1.pdf", 3000)
しかし、このコードをコントローラーに含めると、タイムアウトになります。
2 つの異なる方法を試しましたが、どちらも繰り返し失敗します。
方法 1 コントローラー:
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