2013-02-06 45 views
0

我试图在缓存服务器上安装清漆。我下面的堆栈是...安装带橡胶宝石的清漆服务器

HA代理服务器---->缓存(光油)服务器----> Nginx的+麒麟服务器

我已经能够正确地设置所有的配置文件HAProxy和Varnish将流量沿着管道移动。但是,当我试图启动我的缓存服务器时出现错误。

** ERROR: While executing gem ... (Gem::DependencyError) ** Unable to resolve dependencies: rubber requires net-ssh (~> 2.4.0); fog requires net-ssh (>= 2.1.3); capistrano requires net-ssh (>= 2.0.14); net-ssh-gateway requires net-ssh (>= 2.6.4); net-scp requires net-ssh (>= 2.6.4); net-sftp requires net-ssh (>= 2.6.4) ** /tmp/gem_helper:32:in `block in <main>' ** : Unable to install versioned gem rubber:2.1.2 (RuntimeError **) ** from /tmp/gem_helper:30:in `each' ** from /tmp/gem_helper:30:in `<main>'

我似乎无法找出为什么发生这种情况。任何帮助都会很棒。谢谢

回答

2

我有这个问题,我发现的解决方案有点不满意和暂时的,但它的工作。

rubber:install_gems任务期间发生此错误。失败后,通过ssh登录到ec2服务器。此时如果您尝试在远程控制台中手动运行gem install rubber -v=2.1.2,则它会失败,并显示与上面显示的完全相同的错误。 (版本号可能会有所不同,这取决于你做这个时的橡胶版本)。

因此,现在创建一个任何名称的空文件夹,并在其中创建一个几乎空的Gemfile。

$ mkdir dummy && cd dummy 
$ nano Gemfile 

然后用下面的内容填充的Gemfile:

source 'http://rubygems.org' 
gem 'rubber', '2.1.2' 

再次,橡胶的版本可能会有差异。

创建此文件后,运行bundle install并且所有内容都将正确安装。但是,不要问我为什么它在安装橡胶通过打捆机时的工作方式不同于通过普通老式gem install进行安装。

因此,达到此目的后,从ec2注销并重新运行cap rubber:bootstrap,它应该可以工作。

不令人满意的部分是,如果您决定在ec2上创建新实例,它将在同一时刻再次失败,您必须重复此步骤并手动重新启动该过程才能完成。因此,如果任何人可以想出一个更好的解决方案,如修改橡胶或什么的,让我们知道。

+0

我本来想避免这个,但我一定会试试这个。最好的解决方案是希望橡胶宝石的作者用橡胶更新rubygem.org:2.2.0。这将解决依赖性问题。 –

+0

这让我过去了错误。现在运行'boostrap'完成,但主机无法访问... http://ec2-54-242-112-170.compute-1.amazonaws.com/ – wkdshot

0

让我先说这个,说我有这个相同的问题,解决了它,但我没有使用清漆或独角兽。

它看起来像你缺少capistrano,添加到你的gemfile,它应该照顾的大部分依赖项。但在我的情况下,橡胶抱怨需要net-ssh(〜> 2.4.0),而capistrano安装了最新的net-ssh gem。因此,要修复此问题,请编辑您的Gemfile.lock以使用net-ssh(2.4.0)而不是最新版本,然后运行bundle安装应修复依赖关系。

+0

我不认为编辑Gemfile.lock是一个好主意。见http://stackoverflow.com/a/11136025/621809 – Ernesto

+0

是的,我也不会这样做。真正的问题是由于依赖没有得到解决,不幸的是,当使用橡胶设置服务器时,它不使用捆绑器来安装宝石。猜猜我可能不得不等待,直到橡胶宝石更新在ruby gems.org回购。 –