我有一个Rails应用程序,我想我应该使用db:schema:load来创建MySQL数据库,因为这是推荐的.我的问题是,我正在使用Capstrano进行部署,似乎默认使用rake db:Migrate.有什么方法可以改变这一点吗?或者Capstrano使用db:Migrate是有充分理由的吗?
我有一个Rails应用程序,我想我应该使用db:schema:load来创建MySQL数据库,因为这是推荐的.我的问题是,我正在使用Capstrano进行部署,似乎默认使用rake db:Migrate.有什么方法可以改变这一点吗?或者Capstrano使用db:Migrate是有充分理由的吗?
我发现我自己的迁移最终会对数据进行一些洗牌(例如,假设我将first_name和last_name列组合成一个full_name列).一旦我做了这些,我就开始使用ActiveRecord来筛选数据库记录,您的模型最终会对某些列做出假设.例如,我的"Person"表后来被赋予了一个"position"列,根据该列对人进行排序.以前的迁移现在无法 Select 数据,因为"位置"列还不存在.
总而言之,我相信deploy:cold
should使用db:schema:load
而不是db:migrate
.我通过更改Capstrano在冷部署上执行的中间步骤解决了这个问题.对于Capstrano 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