我的生产rails应用程序需要167秒才能运行rake db:migrate。 可悲的是,没有要迁移的迁移。我试图通过检查是否存在挂起的迁移来调节迁移,但是检查花了一么长时间。 在我看来,唯一的“借口”是db并不是很小,那里有1M记录,但我认为没有理由说这根本不重要。 我查看了日志,但没有任何迹象表明出现了问题。 我正在运行
有没有人知道为什么会这样,以及是否有任何关于它的事情?
答案 0 :(得分:0)
运行rake db:migrate
任务也会调用db:schema:dump
任务,这将更新您的db / schema.rb。因此,即使您没有迁移,也会导致其他rake任务运行,这可能会占用相应的时间,具体取决于数据库架构的迁移次数/数量。
您可以查看db:* tasks的源代码(... / 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
参考文献:http://guides.rubyonrails.org/active_record_migrations.html#running-migrations
Does rake db:schema:dump recreate schema.rb from migrations or the database itself?
答案 1 :(得分:0)
即使没有正在进行的迁移,rake db:migrate
任务在新服务器上也非常慢。
最后,我发现我的Redis配置错误,并且实际上是在加载Rails环境(rake db:migrate
完成)和不运行迁移上花费了时间。
如果您遇到类似的问题,建议您运行:
rails runner "puts 'hello'"
如果这需要很长时间,则问题与Rails配置有关,而与迁移无关。在这种情况下,您可以在几秒钟后使用CTRL-C终止该进程,以便可以查看堆栈跟踪并确定代码的挂起位置。