使用 Capistrano 将 Ruby on Rails 应用程序部署到 Windows Azure VM 时出现超时错误
Posted
技术标签:
【中文标题】使用 Capistrano 将 Ruby on Rails 应用程序部署到 Windows Azure VM 时出现超时错误【英文标题】:Timeout Error when deploying Ruby on Rails app with Capistrano to Windows Azure VM 【发布时间】:2013-03-15 08:27:47 【问题描述】:我是 Capistrano 和 Windows Azure 的新手,在将我的 Ruby on Rails 应用程序部署到我的 Azure 虚拟机时遇到问题。我能够使用 SSH 登录并连接到 VM。此外,我在连接到 VM 时成功创建了一个新的 Rails 应用程序(能够通过 VM 的 DNS 访问它)。但是,我不知道如何从 VM 服务器获取 Rails 代码,以便我可以在本地对其进行编辑,然后将更改推送回服务器。
无论如何,我在本地创建了一个简单的 Rails 应用程序,并希望将它(使用 Capistrano)部署到我的 Azure VM。运行cap deploy
(和cap deploy:setup
)时出现以下错误:
connection failed for: fb-shanghai.cloudapp.net (Errno::ETIMEDOUT: Operation timed out - connect(2))
我一直在玩deploy.rb
配置文件,但一直收到同样的错误。另外,当我将VM DNS“fb-shanghai.cloudapp.net”的:web
角色更改为公共VIP并运行cap deploy
时,我收到提示输入密码但无论我输入什么都失败了.
此时,我真的不知道我需要做什么才能在我的 Azure VM 上运行我的 RoR 应用程序。任何帮助将不胜感激!
我的环境:
Mac OS X 10.7.5 Ruby 1.9.3 Rails 3.2.9 为我的虚拟机使用 Ruby-Stack-1-9-3-6-Ubuntu-12-10 映像【问题讨论】:
【参考方案1】:我遇到了同样的问题,但我的仍然无法使用 IP 而不是 name_of_app.cloudapp.net。我花了一段时间才弄明白,但由于某种原因,Azure 在我创建 VM 时将默认公共端口创建为随机端口号(不是 22),因此我将其编辑为 22 并且它可以工作。
我还应该提到,我使用 VM depot 中的 Bitnami rubystack 来安装我的 VM。
就 deploy.rb 文件而言,我使用了上面发布的教程中的 gist 文件。
【讨论】:
如果从命令行部署 VM Depot 映像,您可以使用 -ssh 开关定义 SSH 端口,例如“-ssh 22” 您运行的是哪个版本的 capistrano?我在使用 3.x 时遇到了各种各样的问题,我在使用 2.6.0 时遇到了一些问题,但仍然出现 -sh 错误......【参考方案2】:原来我需要为服务器配置行指定 VIP:
所以server "xxx.xx.xxx.xxx", :web, :app, :db, primary: true
而不是server "name_of_app.cloudapp.net", :web, :app, :db, primary: true
然后,我需要在deploy.rb
文件的顶部添加require "bundler/capistrano"
。
最后,我遵循了Capistrano wiki 和Ruby on Rails on Windows Azure tutorial 的一些说明。
【讨论】:
我也用 IP 地址xxx.xx.xxx.xxx
替换了name_of_app.cloudapp.net
,它开始工作了。以上是关于使用 Capistrano 将 Ruby on Rails 应用程序部署到 Windows Azure VM 时出现超时错误的主要内容,如果未能解决你的问题,请参考以下文章
/usr/bin/env ruby 没有这样的文件或目录:使用 capistrano 3、capistrano/rbenv、capistrano/bundler 和 capistrano/rail
如何配置 capistrano 以使用我的 rvm 版本的 Ruby
Capistrano在升级ruby版本和puma时重启错误版本的puma
ruby 使用Capistrano 3和rsync进行本地Rails 4资产预编译