バッチ処理にて例外が発生した場合、
スタックトレースをメールで送信する、という処理を行いたいと思っています。
メールの送信自体は行えるのですが、
一定の文字数を超えると全行末に改行文字がひとつ余計に付加されてしまうようです。
Ruby
1class BatchMailer < ActionMailer::Base 2 default from: 'hoge@example.com' 3 layout 'mailer' 4 5 def send_batch_error(batch_name, content, transaction_number = nil) 6 @content = convert_content(content, transaction_number) 7 mail( 8 subject: "連携エラー", 9 to: 'hoge@example.com' 10 ) do |format| 11 format.text 12 end 13 end 14 15 private 16 def convert_content(content, transaction_number) 17 content = [["occur_time", "2018/04/09 01:15:11"], 18 ["error_mess", 19 "/home/vagrant/\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in `block in run'\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in `open\r\n/home/vagrant/someapp/lib/\r\n/home/"], 20 ["error_batch_name", "Batch-base"]] 21 transaction_number= "1" 22 23 arr = content.map do |c| 24 [I18n.t(c[0], scope: :mailer), "#{c[1]}\r\n"] 25 end 26 if transaction_number.present? 27 arr = arr.join("\r\n") + "\r\n#{transaction_number}" 28 else 29 arr = arr.join("\r\n") 30 end 31 arr 32 end 33end
(※1, contentの内容がわかりやすいようメソッド内に直接記述していますが、本来は呼び出す時に渡しています)
(※2, viewはmailer.text.erbで<%= yield %>のみしています)
ここで、例えばcontent["error_mess"]のvalueが、
"/home/vagrant/\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in 'block in run'\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in 'open\r\n/home/vagrant/someapp/lib/\r\n/home/"
だと下記のように意図した改行となります。
発生時刻 2018/04/09 01:15:11 エラーメッセージ /home/vagrant/ /home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in `block in run' /home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in `open /home/vagrant/someapp/lib/ /home/ 発生箇所 Batch-base
content["error_mess"]のvalueが、
"/home/vagrant/\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in 'block in run'\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in 'open\r\n/home/vagrant/someapp/lib/batchs/\r\n/home/"
だと改行文字が余計に付加されてしまいます。
発生時刻 2018/04/09 01:15:11 エラーメッセージ /home/vagrant/ /home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in `block in run' /home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in `open /home/vagrant/someapp/lib/batchs/ /home/ 発生箇所 Batch-base
メーラーの問題かとも思ったのですが、OperaMailとgmail(ブラウザ)いずれも発生しました。
内容はわかるのですが、
少し見難いので余計な改行文字を入れないように修正したいと考えています。
ぜひお力を借りられますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。