Ruby Gem: ошибка выполнения Axlslx: не удается добавить вложения после вызова `mail`

#ruby-on-rails #ruby #axlsx

#ruby-on-rails #ruby #axlsx

Вопрос:

Я просматриваю все свои shop записи и отправляю им электронное письмо, если order ошибка. Он отлично работает через 2 или 3 магазина, но после этого я получаю эту ошибку:

RuntimeError: Can't add attachments after Почта was called.
Make sure to use attachments[]= before calling mail.

Это мой код для создания и отправки вложений:

  def order_report
    shops = Shop.where(subscribed: true, setup: true)
    shops.each do |shop|
      @sheet = OrderReport.new(shop)
      @sheet.create_order_workbook
      get_data_for_inside_email
      time = Time.now
      attachments["test_book.xlsx"] = File.read("test_book.xlsx")
      excel_sheet_line_count = %x{wc -l "test_book.xlsx"}.split[0].to_i #this is just seeing how many lines the file is.. an empty sheet returns as 13
      if excel_sheet_line_count > 13
        mail(to: "some_email@gmail.com", subject: "FBA Shipping Report for #{time.strftime("%B %d")}")
      end
    end
  end
  

Ответ №1:

Я добавлю это сюда, если кто-нибудь когда-нибудь столкнется с этим. Я никогда не мог заставить приведенный выше код работать, но я нашел это, и это работает как шарм:

 mail(to: "todd@gmail.com", 
        subject: "FBA Shipping Report for #{time.strftime("%B %d")}").attachments["problem_orders_#{shop.id}.xlsx"] = File.read("problem_orders_#{shop.id}.xlsx")