首页 > 解决方案 > 分布式 Rails 应用程序 - 如何配置?

问题描述

我有一个在 puma 上运行的相当简单的 Rails 应用程序。在单个节点上 - 它很棒并且完全按照我想要的方式工作。

我一直很难找到 - 我被要求在两个节点上部署这个应用程序。如果您连接到一个节点并执行影响数据库的事务 - 该更改也应该反映在另一个节点上。我找不到任何直接的方法来做到这一点/我不知道该怎么做。

现在-我的情况是应用程序部署在两个节点上-我将其压缩,解压缩,捆绑安装,rails s。在任一节点上都可以正常工作——但是这两个节点是完全独立的,并且有自己的 mysql 数据库。我想统一它们,以便一个节点上的操作反映在另一个节点上。有点......两个节点之间的某种关系,使得它们能够相互交谈。

使用 Rails 完成此任务的常用工具或方法有哪些?我的偏好是集成尽可能少的软件系统/安装尽可能少的 gem - 但是当然,如​​果它有效,我必须考虑它。

标签: ruby-on-railshigh-availabilitypuma

解决方案


作为一个简单的设置,您可以在单个服务器上运行您的数据库。我们称之为服务器database.application.rails。一旦您拥有运行数据库的单个服务器和指向它的 DNS 或主机条目,您需要更新 Railsconfig/database.yml文件以指向该单个数据库,如下所示:

production:
  adapter: mysql2
  host: database.application.rails
  username: <%= ENV["DB_USER_NAME"] %>
  password: <%= ENV["DB_PASSWORD"] %>
  database: application_prod

上述配置还假设您将用户名和密码存储为环境变量——这是一种最佳实践,而不是将它们存储在代码库中。

现在,当您启动您的 rails 应用程序时,您会想要使用bundle exec rails s -e production.

这并不完全是一个高可用性设置,因为您手动启动服务器并且在服务器前面没有单个 Webpuma服务器。

对于更复杂的部署,使用capistrano部署应用程序并将nginx配置为指向您的两个后端puma服务器。


推荐阅读