2015-12-11 62 views
2

我的生產rails應用程序需要167秒來運行rake db:migrate。 可悲的是,有沒有遷移運行。我試圖通過檢查是否存在掛起的遷移來調整遷移,但檢查花費的時間一樣長。 在我看來,唯一的「藉口」是數據庫不是很小,那裏有1M記錄,但我沒有看到爲什麼那麼重要。 我在日誌中查看,但沒有任何表明出現任何問題。 我與即使沒有掛起的遷移,Rails遷移速度也非常緩慢

  • 紅寶石運行2.2.0
  • 的Rails 4.2.0

有沒有人有一個想法,爲什麼會這樣,以及是否有什麼關係呢?

+1

這是否僅適用一般來說,是否需要遷移或啓動您的應用程序? – max

+0

您好,只有遷移部分 –

回答

0

運行rake db:migrate任務還會調用db:schema:dump任務,該任務將更新您的db/schema.rb。因此,即使沒有遷移,也會導致其他rake任務運行,這可能會佔用這個時間,具體取決於數據庫模式的遷移次數/大小。

您可以查看到數據庫的源代碼:*任務(.../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?