由于连接到rubygems.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
宝石系统很棒,但我认为它是一个单一故障的点,当它不可用时,你无法获得最新的补丁等。有一个庞大的Debian存储库网络,可以在地理位置选择镜像。宝石有类似的东西吗?如果有镜子,我怎么能确定那里的包装没有受到损害? (最近也发生在rubygems.org上)
另一件事,当我有宝石的本地副本时,捆绑器可以直接将它们传输到服务器而无需从rubygems.org获取吗?它可能会减少服务器的负载,而且确保您的部署随时可用(我知道,我可以将gems检查到我的git存储库中,但我不喜欢这样做。)
答案 0 :(得分:0)
可能有Rubygems.org的镜像,但我没有尝试过,也不知道他们是否拥有所有的宝石。
但是你的Gemfile
中有一个名为source
的声明,你可以告诉Bundler看另一面镜子。
然而,有一个宝石可以将所有宝石镜像到您的本地系统rubygems-mirror
您可以通过Bundler :path
命令在本地将某些gem安装到您的git中。
因此,如果你想拥有一个本地副本,让我们说你可以做到
gem 'devise', :path => 'vendor/devise'
然后您在vendor/devise
文件夹中克隆设计存储库并将其提交给Git。
如果你试图用所有Gems做到这一点,那真的很无聊,因为Rails本身只涉及几十个宝石。您可以查看RVM Gemsets,并且捆绑器有一种方法可以获取所有宝石并将它们与您的应用程序捆绑在一起(很抱歉,您还需要查阅文档以获取更多信息,因为我还不需要它)
答案 1 :(得分:0)
如果宝石在那里可用,你也可以使用github。 Rubyforge非常受欢迎。据我所知,你的gemfile必须正确声明,如果你有单个ruby和/或rails安装,看看你是否与gem / s有一些版本冲突。
答案 2 :(得分:0)
此gem可能会解决问题capistrano-strategy-copy-bundled。用法非常简单:
config/deploy.rb:
require 'capistrano-strategy-copy-bundled'
set :deploy_via, :copy_bundled
所有宝石都打包在本地的tar存档中,然后传输到服务器。但是有一个问题,如果你想部署具有本机扩展的gems(如数据库驱动程序,therubyracer等),你需要在两台机器上拥有相同的架构和依赖库版本(如glibc)。