3

由于与 ruby​​gems.org 相关的错误,我最近在部署应用程序时遇到了麻烦,例如:

Fetching gem metadata from http://rubygems.org/
Error Bundler::HTTPError during request to dependency API
Fetching full source index from http://rubygems.org/
Unfortunately, a fatal error has occurred. Please see the Bundler
troubleshooting documentation at http://bit.ly/bundler-issues. Thanks!                                                                        

~/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/net/http.rb:762:in `initialize'
Connection timed out - connect(2)
Errno::ETIMEDOUT

gems 系统很棒,但我认为这是一个单一的故障点,当它不可用时,您无法获得最新的补丁等。有一个庞大的 Debian 存储库网络,可以根据地理位置选择镜像。宝石有类似的东西吗?如果有镜像,我怎么能确定那里的包没有被破坏?(最近也发生在 ruby​​gems.org 上)

另一件事,当我有 gem 的本地副本时,bundler 可以直接将它们传输到服务器而不从 ruby​​gems.org 获取吗?它可能会减少服务器的负载,而且可以确保您的部署可以随时工作(我知道,我可以将 gem 签入我的 git 存储库,但我不喜欢这样做)。

4

3 回答 3

0

可能有 Rubygems.org 的镜像,但我没有尝试过,也不知道它们是否拥有所有的宝石。但是在您的Gemfile调用source中有一个声明,您可以在其中告诉 Bundler 查看不同的镜像。

但是有一个 gem 可以将所有 gem 镜像到您的本地系统,称为ruby​​gems -mirror

您可以通过 Bundler:path命令将某些 gem 本地安装到您的 git 中。因此,如果您想拥有一个本地副本,比如说设计,您可以这样做

gem 'devise', :path => 'vendor/devise'

然后你在你的vendor/devise文件夹中克隆设计存储库并将其提交给 Git。

如果您尝试对所有 Gems 都这样做,它会很快变得非常无聊,因为只有 Rails 本身涉及数十个 gem。您可以查看 RVM Gemsets,并且有一种方法可以让捆绑程序获取所有宝石并将它们与您的应用程序捆绑在一起(抱歉,您必须查阅文档以获取更多信息,因为我还不需要)

于 2013-02-14T12:13:37.433 回答
0

如果 gem 在那里可用,您也可以使用 github。Rubyforge 非常受欢迎。据我所知,您的 gemfile 必须正确声明,如果您有单个 ruby​​ 和/或 rails 安装,请查看是否与 gem/s 有一些版本冲突。

于 2013-02-14T12:55:18.493 回答
0

这个 gem 可能会解决capistrano-strategy-copy-bundled的问题。用法很简单:

config/deploy.rb:

require 'capistrano-strategy-copy-bundled'
set :deploy_via,    :copy_bundled 

您的所有 gem 都打包在本地的 tar 存档中,然后将其传输到服务器。但是有一个问题,如果您想部署带有本地扩展(如数据库驱动程序、therubyracer 等)的 gem,您需要在两台机器上拥有相同的架构和版本的依赖库(如 glibc)。

于 2013-02-14T15:25:52.893 回答