使用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
答案 0 :(得分:0)
ActiveRecord::ValueTooLong
异常已经告诉您出了什么问题。 content
表中的emails
列对于已解码的电子邮件正文来说太短了。
将content
列类型更改为text
类型或将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的特定问题。 如果这是一个非铁路项目,则想法是相同的。
转到mysql控制台并运行:
ALTER TABLE emails MODIFY content TEXT;