许多Capistrano示例食谱都包含:db
角色。默认情况下,部署任务将应用程序代码导出到所有角色中的所有主机。因此,这表明人们通常会在数据库主机上保留其应用程序的副本。此外,在卡皮斯特拉诺的分布式deploy.rb
配方中,:deploy:migrate
看起来像这样:
task :migrate, :roles => :db, :only => { :primary => true } do
# ...
end
我的问题是,为什么要这样做呢?让应用程序代码远离DB主机(它甚至可能没有安装Ruby )并从生产机器上运行迁移,不是更干净吗?
发布于 2009-07-21 05:55:43
db服务器运行迁移,因为它是负责数据库的服务器。
还可以设想只允许从数据库服务器本身创建/删除/更改表的安全策略。
如果在迁移期间加载数据,甚至可能会有轻微的性能提升,尽管这在一开始就是一个糟糕的想法。
如果您需要引用您的数据库主机,并且不需要该主机上的代码副本,则可以使用如下代码:
role :db, 'dbhost', :no_release => true
在应用服务器上运行迁移的示例代码:
role :app, 'apphost', :runs_migrations => true
task :migrate, :roles = :app, :only => {:runs_migrations => true } do
#...
end
https://stackoverflow.com/questions/1159033
复制相似问题