即使没有挂起的迁移,Rails迁移也极其缓慢

Ass*_*mer 6 ruby migration performance rake ruby-on-rails

我的生产Rails应用程序需要167秒才能运行rake db:migrate。可悲的是没有任何迁移可以运行。我试图以检查是否有未完成的迁移为条件来运行迁移,但是随后检查花费了同样长的时间。我脑海中唯一的“借口”是数据库不是很小,那里有一百万条记录,但是我认为根本没有什么理由。我查看了日志,但没有任何迹象表明有任何问题。我一起跑步

  • Ruby 2.2.0
  • Rails 4.2.0

有谁知道为什么会这样,是否有任何办法做?

Chr*_*hol 0

运行rake db:migrate任务还会调用该db:schema:dump任务,这将更新您的 db/schema.rb。因此,即使您没有迁移,您也会导致其他 rake 任务运行,这可能会占用该时间,具体取决于数据库模式的迁移数量/大小。

您可以查看 db:* 任务的源代码 (.../activerecord/railties/databases.rake)

desc "Migrate the database (options: VERSION=x, VERBOSE=false)."
task :migrate => :environment do
  ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
  ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
  Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
end
Run Code Online (Sandbox Code Playgroud)

参考文献:http://guides.rubyonrails.org/active_record_migrations.html#running-migrations

rake db:schema:dump 是否从迁移或数据库本身重新创建 schema.rb ?