在rails代码上将类似的ruby部署到多个服务器

时间:2013-09-24 21:20:08

标签: ruby-on-rails capistrano

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

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

非常感谢您的帮助。

1 个答案:

答案 0 :(得分: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 }表示只有在部署到的服务器上至少存在一个版本时才会运行。{/ p>

This wiki article可能会对您有所帮助。