分布式 Rails App - 如何配置?

Distributed Rails App - how to configure?

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

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

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

用 Rails 完成此任务的常用工具或方法有哪些?我的偏好是集成尽可能少的软件 systems/install 尽可能少的 gem - 当然,如果可行,我必须考虑它。

作为一个简单的设置,您可以 运行 您的数据库在一台服务器上。我们称该服务器为 database.application.rails。一旦你有了那个单一的服务器 运行 连接你的数据库和指向它的 DNS 或主机条目,你将需要更新 Rails config/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

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

对于更复杂的部署,使用 capistrano to deploy the application and configure nginx 指向两个后端 puma 服务器。