许多 Capistrano 示例食谱都包含一个:db
角色。默认情况下,部署任务将应用程序代码导出到所有角色的所有主机。这表明人们通常会在数据库主机上保留其应用程序的副本。此外,在 Capistrano 的分布式deploy.rb
配方中,:deploy:migrate
如下所示:
task :migrate, :roles => :db, :only => { :primary => true } do
# ...
end
我的问题是,为什么会这样?让应用程序代码远离数据库主机(甚至可能没有安装 Ruby)并从生产机器运行迁移不是更干净吗?