2009-07-21 18 views
3

许多Capistrano示例食谱包括:db角色。默认情况下,部署任务将应用程序代码导出到所有角色中的所有主机。因此,这表明人们通常在数据库主机上保留其应用程序的副本。此外,在Capistrano酒店的分布式deploy.rb配方,:deploy:migrate看起来是这样的:为什么要在数据库主机上保留应用程序的副本?

task :migrate, :roles => :db, :only => { :primary => true } do 
    # ... 
end 

我的问题是,为什么会这样呢?将应用程序代码从数据库主机(甚至可能没有安装Ruby)上运行并运行生产环境中的迁移不是更清洁吗?

回答

7

db服务器运行迁移,因为它是数据库的负责人。

人们也可以想象安全策略,只允许从数据库服务器本身创建/删除/更改表。

如果在迁移过程中加载数据,性能可能会有所提高,但这是一个可怕的想法。

如果您有需要引用您的数据库主机,并且不需要在它的代码的副本,你可以使用这样的事情:

role :db, 'dbhost', :no_release => true 

示例代码到应用服务器上运行迁移:

role :app, 'apphost', :runs_migrations => true 
task :migrate, :roles = :app, :only => {:runs_migrations => true } do 
    #... 
end 
+0

不错,我不知道:no_release选项。 – 2009-07-21 16:57:33

相关问题