我有一个“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
, migrate
then 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
我不明白它有什么区别,但这有效。有人有解释吗?