2010-04-27 80 views
6

我在这里不知所措,在为海洋解决方案(阅读:互联网)搜索解决方案之后,我只剩下堆栈了。任何帮助赞赏。Capistrano在多个主机部署中失败

我有capistrano运行本地部署到几个不同的环境。 (我在Windows 7上,fwiw)。一切都很好,直到我需要在单个部署期间部署到多个应用程序服务器。

当我拨打cap deploy时,通常会提示输入我的ssh密码。我有ssh-agent运行(git从来没有为我的传球而痛苦),但尽管这个Capistrano在每次部署时都会给我一次警告。无论如何,它在部署到一台主机时总是有效。

现在,当我试图同时部署到多台服务器,它要求我的密码似乎是多次:

(IPS由ME移除)

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 w/out输入我的密码短语
  3. 在cap部署中使用'forward_agent'设置不起作用。
  4. 这是我的角色:
    role :app, "ip 1 removed", "ip 2 removed"
  5. 如果我设置default_run_options[:max_hosts] = 1,它的工作原理确定,但它要求我的密码短语,其最终被很多每台主机我部署到..每一个连接。

基本上我寻找任何的下方(但不限于): - “你永远不会解决在Windows” - “这是你如何得到Capistrano的REAL密码的部署“ - ”你忽略了这个设置/功能吗?“ - “我有一块石头可以修补任何东西,你可以借用它”

谢谢!

回答

0

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

cap invoke COMMAND="echo 'Hello World'" 

如果不能运行,那么你的用户可能与你的ssh无密码代理不一样。您还可以查看服务器上的SSH日志,看看您是否可以知道哪个代理实际尝试连接失败。

+0

我有多个阶段,所以我会打电话: cap production invoke ... 这样做会失败,因为它会同时为每个服务器形成密码(即:我一次被问到密码,但我是没有机会4次进入)。 为单个服务器运行此工作正常,例如: cap prod1调用... 因为我可以在任何单独的服务器上成功调用,所以我毫不犹豫地认为它的用户变量。 我必须通过VPN连接,我不知道这是否与它有关。 – morris082 2010-06-26 17:57:10

0

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

+0

正在进行的讨论发生在这里: http://groups.google.com/group/capistrano/browse_thread/thread/d38dee230377b464 – jeyroz 2010-09-29 19:41:24

+1

当我给了我一个漩涡,我必须通过ssh键提供每个为每个命令触发的命令服务器(总计约占30)。我确实有ssh-agent,但cap仍然要求。 (与ssh代理关闭它问了两次) – morris082 2010-09-30 13:53:08

0

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

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

+0

感谢提醒我这篇文章!我最近听说windows上的capistrano只支持Putty-agent并尝试过,但无济于事。我需要进一步尝试一下,并在此处进行更新。 – morris082 2010-11-16 13:18:12

+0

刚刚添加了有关msysgit的ssh授权配置信息 – mpapis 2010-11-16 13:22:47

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集。