Ruby on rails Rails capistrano部署到多个服务器

Ruby on rails Rails capistrano部署到多个服务器,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,capistrano,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,Capistrano,我正在尝试优化我的应用程序。我想将rails应用程序部署到不同的机器上。不幸的是,我不知道怎么做 role :web, "ip1","ip2" role :app, "ip1, ip2" role :db, "db_ip", primary: true set :application, "Name" set :user, "root" set :port, 22 set :deploy_to, "/home/#{user}/apps/#{application}" set :ssh_optio

我正在尝试优化我的应用程序。我想将rails应用程序部署到不同的机器上。不幸的是,我不知道怎么做

role :web, "ip1","ip2"
role :app, "ip1, ip2"
role :db, "db_ip", primary: true
set :application, "Name"
set :user, "root"
set :port, 22
set :deploy_to, "/home/#{user}/apps/#{application}"
set :ssh_options, {:forward_agent => true}
ssh_options[:forward_agent] = true
ssh_options[:keys] = %w(~/.ssh/id_key)
这是我的配置。我有两台unicorn服务器和一台db服务器。当我使用cap:deploy:cold时,它会询问我密码,但我不知道应该输入哪台机器的密码?它不适用于服务器的所有密码。我收到

(Net::SSH::AuthenticationFailed: root)

有人能解释一下我的配置应该如何部署到所有的机器上吗?

这应该可以,但是您应该设置ssh连接,这样就不必使用ssh密钥输入密码了。

这是针对版本3的,在看到版本设置为2之前发布的

尝试这样设置全局选项

 set :ssh_options, {
   keys: %w(/home/your_user/.ssh/id_key),
   forward_agent: true,
  }
您的密钥称为id_密钥(id_rsa更常见)

如果您需要在每台服务器上执行此操作,则可以执行此操作

server 'ip1', 
 user: 'root',
 roles: %w{web app},
 ssh_options: {
   user: 'foobar', # overrides user setting above
   keys: %w(/home/user_name/.ssh/id_rsa),
   forward_agent: false,
 }

您能告诉我为每个ip设置ssh密钥的正确语法是什么吗?您真的是以root用户身份部署的吗?请重新考虑一下。以无特权用户身份运行所有应用程序。我可以使用ssh登录到计算机root@ip. 我看到我的用户是/home/debian,但即使我将其更改为“debian”,它也不起作用。我也不能用ssh登录debian@ip.whichcapistrano的版本您正在使用吗?我当前的版本是2.15.5。您应该考虑迁移到版本3(IMO),因为它更好地处理多个服务器、多个角色和阶段。请参阅下面我的答案(它基于capistrano的第3版),感谢您的回复。所以在我的例子中,“footbal”应该是“debian”,对吗?那么您将部署到/home/debian/apps/{application}的哪个位置?基本上,您要做的是在全局配置中设置所有公共内容,然后在需要时使用每服务器覆盖在每台服务器上进行更改(即使用不同的密钥或不同的ssh选项)。如果您以用户身份登录服务器,那么用户选项可能是debiandebian@ip. 或者您正在尝试将应用程序以root用户身份部署到/home/debian,您可能需要使用不同的用户/名称我很困惑,因为我是使用root@ip但是我的目录是/home/debian/apps/{application}因此,对于所有服务器,deploy_to应该与debian相同,但是ip1中被重写的用户应该是root用户或debian?如果您不需要动态地将deploy_设置为。您可以说
/home/debain/apps/Name
,不必担心覆盖,但这与您最初的问题不同,您是否仍然无法通过身份验证,我会尝试硬编码密钥路径,只有当它与您运行的cap(部署)用户不同时,如果您可以使用sshroot@ip1直接从您的用户处,而不指定密钥文件,您可以远程ssh_密钥选项。