2016-07-01 112 views
2

RubyGems site使其運行私人寶石服務器聽起來相當容易!私人寶石服務器 - 在服務器上未找到依賴關係(404)

我的測試設置是這樣的:一個AWS EC2實例是我的工作站,我還有另一個設置爲寶石服務器。

在寶石服務器實例上,我安裝了pry寶石。如果我在該實例上運行gem server並在我的Web瀏覽器中訪問公共DNS,我可以看到pry以及gem列表中的所有依賴關係。

在我的工作站我創建了一個假的應用程序目錄用一個簡單的Gemfile:

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

gem "pry" 

似乎很簡單!但是,當我在工作站上運行bundle install我得到以下錯誤:

[[email protected] 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錯誤)。

我已經運行gem server時擺弄--dir標誌,以便它看起來像這樣:

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

有什麼我失蹤?

回答

0

幾乎每一個寶石都依賴於其他寶石。如果您只想從私有gem服務器安裝gems,並且您不允許使用https://rubygems.org的默認服務器作爲後備服務器,那麼您必須確保您的私有gem服務器上也提供了正確版本的所有其他gem 。

您可以檢查the pry page on rubygems以查看其依賴關係。目前pry ('0.10.3')取決於:

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

使這種依賴性可用您的私人寶石服務器上太刪除Gem::RemoteFetcher::FetchError: bad response Not Found 404錯誤行爲的寶石。

在下一步中,您需要深入挖掘並使所有寶石可用這三個寶石取決於:coderay沒有外部依賴關係,但method_source有一些,請安裝它們。繼續,直到沒有更多的寶石丟失在依賴關係樹中。

+1

是的我意識到所有的依賴關係也需要在我的寶石服務器上。顯然'coderay'和'pry'的其他直接依賴關係在我的服務器上;否則'撬'不會被安裝。所以問題是:爲什麼不找到'coderay'? – sixty4bit