3

我有一个“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 任务rake db:rebuild,它执行drop, create, migratethen 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

--

所以我的问题是,当我尝试插入内容超过 7768 个字符的文章(在种子.rb 文件中)时,使用任务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

我不明白它有什么区别,但这有效。有人有解释吗?

4

1 回答 1

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_pa​​cket 字节的数据包时,它会发出 ER_NET_PACKET_TOO_LARGE 错误并关闭连接。对于某些客户端,如果通信数据包太大,您可能还会在查询错误期间丢失与 MySQL 服务器的连接。

于 2013-03-17T13:03:37.973 回答