【问题标题】:Why keep a copy of an app on the DB host?为什么要在数据库主机上保留应用程序的副本?
【发布时间】:2010-11-12 15:24:36
【问题描述】:

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

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

我的问题是,为什么会这样?让应用程序代码远离数据库主机(甚至可能没有安装 Ruby)并从生产机器运行迁移不是更干净吗?

【问题讨论】:

    标签: ruby-on-rails ruby deployment capistrano


    【解决方案1】:

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

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

    如果在迁移过程中加载了数据,甚至可能会有轻微的性能提升,尽管一开始这是一个糟糕的想法。

    如果您需要引用您的数据库主机并且不需要其上的代码副本,您可以使用以下内容:

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

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

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

    【讨论】:

    • 很好,我不知道 :no_release 选项。
    猜你喜欢
    • 2014-08-12
    • 2018-09-12
    • 2017-11-15
    • 2019-09-14
    • 2012-07-22
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多