ruby-on-rails - 为什么要在数据库主机上保留应用程序的副本?

标签 ruby-on-rails ruby deployment capistrano

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

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

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

最佳答案

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

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

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

如果您需要引用您的数据库主机并且不需要上面的代码副本,您可以使用这样的东西:

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

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

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

关于ruby-on-rails - 为什么要在数据库主机上保留应用程序的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1159033/

相关文章:

deployment - 如何在docker中设置加密的Travis env变量?

ruby-on-rails - Ruby on Rails,使用同名枚举的问题

ruby-on-rails - 在没有 will_paginate gem 的情况下在 Ruby 中实现分页

ruby-on-rails - rails 模型 : How to make field read only in Rails model?

mysql - 如何在 Mac OS X 10.6.6 上安装 mysql 和 ruby​​ 以及 mysql/ruby

java - 使用可执行 jar 时将配置文件加载到类路径中

jenkins - 如何将构建工件传递到 Jenkins 的另一个工作中

ruby-on-rails - 无法测试使用 delayed_job 'delay' 方法时是否调用了方法

ruby-on-rails - Rails STI和 "type"字符串的设置

ruby-on-rails - 我无法在 Ruby on Rails 上提供静态图像