Ruby gems仓库

6
我正在尝试在本地服务器上设置gem仓库。以下是我从几个指南中遵循的步骤:
1) 创建BASEDIR文件夹/var/www/html/gems
2) sudo cp -r /usr/lib/ruby/gems/1.8/gems/someGem /var/www/html/gems
3) sudo gem generate_index -d /var/www/html/gems
然而,当我运行此命令时,我得到以下输出:
Loading 0 gems from /var/www/html/gems

Loaded all gems
Generating quick index gemspecs for 0 gems

Complete
Generating specs index
Generating latest specs index
Generating quick index
Generating latest index
Generating Marshal master index
Generating YAML master index for 0 gems (this may take a while)

Complete
Compressing indicies

由于某种原因,gem无法加载。我看到一篇指南建议将BASEDIR设置为/var/www/html/rubygems/,然后在BASEDIR中创建一个gems/目录,并将所需的gems复制到此gems/目录中。我也尝试过这样做,但结果仍然相同。
我们的服务器不幸与此文章中提到的配置相同(RHEL5,ruby 1.8.5,/var和/tmp位于单独的分区上),但我们按照建议升级到了ruby 1.8.6,但它仍无法加载gem。
有人遇到过这个问题吗?找到解决方法了吗?
4个回答

5
我偶然发现了自己以前的帖子,发现我早就解决了这个问题,所以我认为我应该发布我的答案。

问题出在第二步:复制 gem 操作上。

在原帖中,我尝试了

2) sudo cp -r /usr/lib/ruby/gems/1.8/gems/someGem /var/www/html/gems

我发现我需要复制实际的 .gem 文件,它们位于 .../gems/1.8/gems/cache 中。所以我真正需要做的是:

sudo cp .../gems/1.8/gems/cache/*.gem /var/www/html/gems

正确复制宝石后,索引工作正常,我们可以将其添加为各种机器上的宝石源来使用我们的服务器。安装自定义宝石随后顺利进行。


5
我们在内部使用Artifactory来管理我们的内部rubygems - 其中一些是专有的,一些是公开发布的。我们可以在不同的组(dev、qa - prerelease、release等)之间强制执行安全性。

此外,rubygems.org被代理并在本地缓存,这有助于我们获得更好的性能并避免远程停机时间。

最终,开发人员使用单个源URL,透明地聚合了远程和本地仓库。


4

您应该在basedir目录下生成索引,而不是在gems子目录下。

sudo gem generate_index -d /var/www/html

它会自动获取“gems”子目录中的宝石。
并在基础目录中生成索引。


好的,在这种情况下,我应该把 gem 复制到哪里呢? - istrasci
你会在“gems”子目录中找到宝石。 - Damien MATHIEU
抱歉,我误读了你的原始回复为“它会自动制作...” 无论如何,它仍然不起作用...也许是我们不幸的配置问题? - istrasci

0

我也遇到了同样的问题,所以我开始浏览Gem::Indexer的代码,并编写了几行代码来从我的主机目标(即./gems上面的那个)启动的irb中进行索引:

require 'rubygems'
require 'rubygems/indexer'

i=Gem::Indexer.new '.'
i.generate_index

如果您想稍后更新索引:

require 'rubygems'
require 'rubygems/indexer'

i=Gem::Indexer.new '.'
i.update_index

我怀疑gem命令的问题必须存在于命令解析层面的更高位置,但我还没有深入研究它(我只是想创建我的存储库并继续前进)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接