我有一个 Rails 应用程序,我正在移动到另一台服务器,我想我应该使用 db:schema:load 来创建 mysql 数据库,因为它是推荐的。我的问题是我正在使用 capistrano 进行部署,它似乎默认为 rake db:migrate。有没有办法改变这个或者 capistrano 使用 db:migrate 有充分的理由?
最佳答案
为什么要使用 db:schema:load
我发现我自己的迁移最终会对数据进行一些混洗(例如,假设我将 first_name 和 last_name 列组合成一个 full_name 列)。只要我做了其中任何一项,我就会开始使用 ActiveRecord 来筛选数据库记录,您的模型最终会对某些列做出假设。例如,我的“人员”表后来被赋予了一个“职位”列,人们可以根据该列进行排序。早期的迁移现在无法选择数据,因为“位置”列尚不存在。
如何改变 Capistrano 中的默认行为
总而言之,我认为deploy:cold
应该使用db:schema:load
而不是db:migrate
。我通过更改 Capistrano 在冷部署时执行的中间步骤解决了这个问题。对于 Capistrano v2.5.9,库代码中的默认任务如下所示。
namespace :deploy do
...
task :cold do
update
migrate # This step performs `rake db:migrate`.
start
end
...
end
我覆盖了我的 deploy.rb
中的任务,如下所示。
namespace :deploy do
task :cold do # Overriding the default deploy:cold
update
load_schema # My own step, replacing migrations.
start
end
task :load_schema, :roles => :app do
run "cd #{current_path}; rake db:schema:load"
end
end
关于mysql - 数据库 :schema:load vs db:migrate with capistrano,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1329778/