我有一个'blog_articles'类,其中包含一个名为'content'的文本列。这是迁移:
create_table :blog_articles do |t|
t.references :blog_user
t.string :title
t.text :summary
t.text :content
t.boolean :published, :default => false
t.timestamps
end
我还有一个自定义佣金任务rake db:rebuild
,执行drop
,create
,migrate
然后seed
。这是rake任务:
namespace :db do
desc "run db:drop, db:create, db:migrate and db:seed tasks in a row."
task :rebuild => :environment do
if Rails.env == "production"
# Do nothing
else
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
Rake::Task["db:seed"].invoke
end
end
end
-
所以我的问题是,当我尝试插入一篇文章(在seeds.rb文件中),内容超过7768个字符时,我收到Mysql2::Error: MySQL server has gone away : INSERT INTO 'blog_articles' [...]
错误,使用rake db:rebuild
任务。
如果我手动运行rake db:seed
,或者我在控制器中创建文章,则完全没问题。
我该如何解决这个问题?我使用了很多新的db:rebuild
任务。
编辑:
所以,我通过将重建任务更改为此
来解决我的问题namespace :db do
desc "run db:drop, db:create, db:migrate and db:seed tasks in a row."
task :rebuild => :environment do
if Rails.env == "production"
# Do nothing
else
system "rake db:drop"
system "rake db:create"
system "rake db:migrate"
system "rake db:seed"
end
end
end
我不明白它有什么不同,但这有效。 有人有解释吗?
答案 0 :(得分:1)
尝试修改my.cnf
,增加max_allowed_packet
[mysqld]
max_allowed_packet=512M
http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的数据包时,会发出ER_NET_PACKET_TOO_LARGE错误并关闭连接。对于某些客户端,如果通信包太大,您在查询错误期间也可能会失去与MySQL服务器的连接。