1

我的本地主机上有一个看起来不错的 Rails 应用程序。现在我想将它部署到多个服务器(一个负载均衡器,确切地说是两个应用程序服务器,未来可能会增加),不知何故我迷路了。这是我第一次自己部署网络,所以我很抱歉我缺乏知识。

我希望所有应用程序服务器都运行完全相同的代码。当我创建新内容时,我希望将新内容存储在每个服务器的数据库实例 (MySQL) 上。因此,当我关闭一台服务器进行维护和更新时,服务器的其余部分可以为用户提供完全相同的内容。我读过 capistrano 可以帮助我解决这个问题,但不知何故,我设法迷失了学习如何做到这一点。那么,我应该如何从这里着手呢?capistrano 配方应该是什么样子,我是否还必须在我的 rails 中调整 database.yml ?

非常感谢您的帮助。

4

1 回答 1

3

您可以使用角色将相同的应用程序部署到多个服务器。假设您使用的是多阶段扩展,请在以下位置定义角色production.rb

server1 = 'appserver1.tld'
server2 = 'appserver2.tld'
server3 = 'webserver1.tld'

role :app, server1, server2
role :web, server3

Web 服务器将在:web角色指定的服务器上运行。

应用层将在:app角色指定的服务器上运行。

如果您在部署期间运行迁移或其他数据库操作,您还应该在:db角色下指定一个服务器。例如:

role :db, 'dbserver.tld', :primary => true

您可能有多个数据库服务器,但通过指定一个作为主服务器 capistrano 将只在该服务器上运行数据库操作。

在您的deploy.rb中,您还可以创建仅针对某些角色运行的任务。例如:

task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
end

在上面的示例中,:except => { :no_release => true }意味着它仅在部署到的服务器上存在至少一个版本时才会运行。

这篇 wiki 文章可能对您有进一步的帮助。

于 2013-09-25T10:48:51.037 回答