views:

620

answers:

3

I'm trying to set a gem repository on one of our local servers. Here are the steps I'm running, that I've followed from several guides.

1) I create the BASEDIR folder /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

However, when I run this, I get the following output:

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

It's not loading the gem for some reason. I did see a guide that recommended making the BASEDIR as /var/www/html/rubygems/ and then further make a gems/ directory within the BASEDIR and copy the desired gems to this gems/ directory. I also tried this, but was getting the same results.

Our server had the unfortunate luck of having the same configuration as mentioned in this post (RHEL5, ruby 1.8.5, /var and /tmp on separate partitions), but we upgraded as suggested to ruby 1.8.6, but it still won't load the gem.

Has anyone come across this? Found a solution?

+1  A: 

You should generate the index not on the gems subdirectory. But on the basedir one.

sudo gem generate_index -d /var/www/html

It'll take automatically the gems in the "gems" subdirectory.
And generate the index at in the basedir.

Damien MATHIEU
OK, in this situation, where would I copy the gems to then...?
istrasci
You would have the gems in the "gems" subdirectory.
Damien MATHIEU
Sorry, I misread your original reply as "It'll MAKE automatically..." Anyway, it still doesn't work... Maybe our unlucky configuration?
istrasci
A: 

The same thing happened to me so I started to browse the code for Gem::Indexer and wrote a few lines of code to do the indexing from irb launched from my host destination (the one above ./gems):

require 'rubygems'
require 'rubygems/indexer'

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

And if you want to update the index later:

require 'rubygems'
require 'rubygems/indexer'

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

I suspect the issue with the gem command must exist somewhere higher at the command parsing level but I have not looked into it (I just wanted to create my repository and move on).

I created a short blog post on the overall thing: http://blog.monnet-usa.com/2010/02/14/hosting-my-own-ruby-gems-repository/

Philippe Monnet
+1  A: 

I stumbled upon my old post and realized I'd actually solved this some time ago, so I figured I'd post my answer.

The problem was my step 2: copy gems action.

In the OP, I had tried

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

What I found was that I needed to copy the actual .gem files, which lived at .../gems/1.8/gems/cache . So what I really needed to do for step 2 is:

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

After copying the gems correctly, the indexing worked as expected, and we could then use our server by adding it as a gem source on various machines. Installing our custom gems then worked smoothly.

istrasci