ActiveRecord ::ValueTooLong с Ruby Gem Mail

#ruby #email

#ruby #Адрес электронной почты

Вопрос:

При использовании Mail gem для получения электронной почты я иногда получаю следующую ошибку.

 ActiveRecord::ValueTooLong
  

Часть, которая вызывает это, — curr_mail.body.decoded .
Как я могу запустить это на Mysql?

При установке максимального размера для тела все работает нормально.

 curr_mail.body.decoded[5000] 

emails.each do |curr_mail|
        Email.create subject: curr_mail.subject, content: curr_mail.body.decoded,
          from: curr_mail.from.first , to: curr_mail.to.first,  date: curr_mail.date,
             messageId: curr_mail.message_id
    end
  

Ответ №1:

Исключение ActiveRecord::ValueTooLong уже сообщило вам, что не так. content Столбец в emails таблице слишком короткий для декодированного тела письма.

Изменение content типа столбца на text type или установка content длины на большее число решило бы эту проблему.

Запустите rails g migration change_content_of_emails_to_text для создания файла миграции.

Вы можете написать что-то вроде этого в сгенерированном файле миграции:

 class ChangeContentOfEmailsToText < ActiveRecord::Migration[5.2]
  def change
    change_column :emails, :content, :text
  end
end
  

Затем запустите bundle exec rake db:migrate команду.

Редактировать: я только что понял, что это может быть не конкретный вопрос Rails. Если это не rails-проект, идея та же.

Перейдите в консоль mysql и запустите:

 ALTER TABLE emails MODIFY content TEXT;