Capistrano无法进行多个主机部署

时间:2010-04-27 02:17:56

标签: capistrano

我在这里感到茫然,在淘海之后(阅读:互联网)寻求解决方案,我只剩下其他东西。任何帮助表示感谢。

我在本地运行capistrano,可以部署到几个不同的环境中。 (我在Windows 7上,fwiw)。一切顺利,直到我需要在单个部署期间部署到多个:app服务器。

我打电话给cap deploy时,通常会提示我输入一次密码短语。我有ssh-agent运行(git从来没有为我的通行证而烦恼)但是尽管如此,Capistrano在每次部署时都一直在窃听我。无论如何,它在部署到一台主机时始终有效。

现在,当我尝试一次部署到多个服务器时,它会询问我的密码短语似乎是多次:

(ips删除了ips)

servers: ["redacted", "redacted"]<br />
Enter passphrase for ~/.ssh/id_rsa: Enter passphrase for ~/.ssh/id_rsa: 

所以上面我输入我的密码,但这不起作用。它等待的时间很短,然后吐出这个错误:

connection failed for: <one of the server ips> (NoMethodError: undefined method `overwrite' for nil:NilClass)

这就是结束。

  1. 我可以“无密码”ssh到我正在部署的服务器上。
  2. 我很确定ssh-agent正在运行,因为我每次都可以点击Git输入我的密码
  3. 在cap部署中使用'forward_agent'设置不起作用。
  4. 这是我的角色:
    role :app, "ip 1 removed", "ip 2 removed"
  5. 如果我设置default_run_options[:max_hosts] = 1,它可以正常工作,但是它会为我正在部署的每个主机的每个连接请求我的密码。这最终会有很多。
  6. 基本上我正在寻找以下任何一种(但不限于此):   - “你永远不会在Windows上修复它”   - “这就是你在capistrano中实现真正无密码部署的方法”   - “你有没有忽略这个设置/功能?”   - “我有一块可以修理任何东西的岩石,你可以借用它”

    谢谢!

4 个答案:

答案 0 :(得分:0)

用户变量设置为什么?从带有Capfile的目录运行一个简单的invoke命令,该命令应该尝试在列出的每个服务器上执行。它是否成功连接?

cap invoke COMMAND="echo 'Hello World'"

如果不能运行那么您的用户可能与您的ssh无密码代理不同。您还可以查看服务器上的SSH日志,看看是否可以告诉代理实际尝试连接失败的原因。

答案 1 :(得分:0)

我实际上遇到了同样的问题并通过提供“default_run_options [:max_hosts] = 1”并使用ssh-agent来缓存我的密码来纠正它(真的修补了它)。当然,这不是一个理想的解决方案,核心问题仍然隐藏在表面之下。

答案 2 :(得分:0)

您是否曾尝试使用putty-agent存储ssh密码?

可能不是直接响应,但您可以安装msysgit并选择msysgit完全添加到PATH,也选择使用putty-agent进行身份验证。

答案 3 :(得分:0)

我有一个几乎完全相同的问题(在Ubuntu 10.04上),除了得到错误connection failed for...之外,它只会坐在那里,什么都不做,直到我按CTRL + C.

解决方案是通过键入ssh-add /path/to/my/private/key手动将我的SSH密钥添加到我的密钥环。它问我输入的密码。然后,我可以在不输入密码的情况下运行cap production invoke COMMAND="hostname"cap production deploy

我确实设置了ssh_options[:forward_agent] = true