Разница между электронной почтой консоли и вложенными файлами

Я генерирую счет-фактуру в формате PDF через wicket_pdf, и это работает. Этот PDF-файл будет использоваться в качестве вложения в электронном письме на следующем этапе процесса.

# user.rb
def send_last_invoice_email!(invoice)
  UserMailer.send_actual_invoice_email(self, invoice).deliver
end

# user_mailer.rb
def send_actual_invoice_email(user, invoice)
  @user = user
  @invoice = invoice
  to = @user.email
  # THIS IS THE PROBLEMATIC LINE
  attachments["#{@invoice.file_name}"] = File.read(@invoice.file_name_path)
  mail(:to => to)
end

# console => works
user = User.where("step_id = 1 AND status = 0").last
invoice = user.invoices.last
user.send_last_invoice_email!(invoice)

# rake task => doesn't work
desc "send email for first user for step_id => 1 testing purpose"
task :send_mail => :environment do
  user = User.where("step_id = 1 AND status = 0").last
  invoice = user.invoices.last
  user.send_last_invoice_email!(invoice)
end

Когда я звоню в рейк-задание, PDF-файл пуст. Я уже отладил его, и имя файла существует, и оригинальный файл PDF в порядке, но только вложенный файл PDF внутри письма пуст.

Я использую letter_opener (1.0.0) в режиме разработки.

Кто-нибудь знает, почему существует разница между консолью и выполнением одного и того же кода через задачу rake? И как я мог отладить эту разницу?

1 ответ

Решение

Нашел проблему. это было действительно странно. Я нашел решение при сравнении двух PDF-файлов в hex-редакторе.

в граблях я должен был установить стандартную кодировку ruby ​​в utf-8

# users.rake 
namespace :users do
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
  ...

Я надеюсь, что, возможно, другие могли бы извлечь выгоду из моих двухдневных усилий:-). ура

Другие вопросы по тегам