私有gem服务器 - 在服务器上找不到依赖项(404)

时间:2016-07-01 04:29:27

标签: ruby amazon-ec2 rubygems bundler

RubyGems site使得运行私有gem服务器变得非常简单!

我的测试设置是这样的:一个AWS EC2实例是我的工作站,我还有另一个设置为gem服务器。

在gem服务器实例上,我安装了pry gem。如果我在该实例上运行gem server并在我的网络浏览器中访问公共DNS,我可以看到pry以及宝石列表中的所有依赖项。

在我的工作站上,我创建了一个带有简单Gemfile的伪app目录:

source "http://ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com:8808"

gem "pry"

看起来很简单!但是当我在工作站上运行bundle install时,我收到以下错误:

[ec2-user@ip-172-31-20-246 my_app]$ bundle
Fetching source index from http://ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com:8808/
Resolving dependencies...

Gem::RemoteFetcher::FetchError: bad response Not Found  404 (http://ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com:8808/gems/coderay-1.1.1.gem)

Gem::RemoteFetcher::FetchError: bad response Not Found  404 (http://ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com:8808/gems/method_source-0.8.2.gem)

Gem::RemoteFetcher::FetchError: bad response Not Found  404 (http://ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com:8808/gems/slop-3.6.0.gem)
Using bundler 1.12.5
An error occurred while installing coderay (1.1.1), and Bundler cannot continue.
Make sure that `gem install coderay -v '1.1.1'` succeeds before bundling.

所以它似乎认识到pry可用,但是找不到以coderay开头的依赖项(404错误)。

在运行--dir时,我已经摆弄了gem server标志,所以它看起来像这样:

gem server --dir=/home/ec2-user/.gem/ruby/2.0 --dir=/usr/share/ruby/gems/2.0 --dir=/home/ec2-user/.gem/ruby/2.0/cache/

...我甚至已经进入这些目录并运行gem generate_index,因为我在另一个问题上看到推荐但我仍然无法使用此私有服务器在我的工作站上安装pry source

我有什么遗漏吗?

1 个答案:

答案 0 :(得分:0)

几乎每颗宝石都依赖于其他宝石。如果您只想从私有gem服务器安装gem并且不允许在https://rubygems.org使用默认服务器作为后备,那么您必须确保所有其他宝石都在您的私人宝石服务器。

您可以查看the pry page on rubygems以查看其依赖关系。目前pry ('0.10.3')取决于:

  • coderay ('~> 1.0.0')
  • method_source ('~> 0.8.1')
  • slot ('~> 3.4')

也可以在私有gem服务器上使用此依赖项,以删除该gem的Gem::RemoteFetcher::FetchError: bad response Not Found 404错误。

在下一步中,您需要深入挖掘并使所有宝石可用,这三个宝石依赖于:coderay没有外部依赖,但method_source有一些,也安装它们。继续,直到缺少依赖关系树中的宝石。