Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby gem listed, but won't load (gem in user dir, not ruby dir)

Tags:

ruby

rubygems

I'm trying to get some gems working on a web-host which supports ruby and some ruby gems, but not some of the ones I need to use.

Following the instructions I found here, I kept the original gem location in my gem path, and added my own at /path/to/my/home/gems to ~/.gemrc

gemhome: /users/home/myuser/gems
gempath:
- /usr/local/lib/ruby/gems/1.8
- /users/home/mysuser/gems

I downloaded some gems manually and did installs using the --local and --install-dir options of the gem command. I then did a "gem list", and can in fact see the gems I installed in my user directory, as well as the original gems in the normal system path.

If I kick on IRB or do a ruby -e, all the system gems work fine. However, I can't get my user directory installed gems loaded:

$ ruby -r rubygems -e "require 'nokogiri'"
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- nokogiri (LoadError)
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require'
    from -e:1

I even tried the old school require_gem:

$ irb -r rubygems
irb(main):001:0> require_gem 'nokogiri'
Gem::LoadError: Could not find RubyGem nokogiri (> 0.0.0)

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem'
    from (irb):1

From my "gems list" I can see:

nokogiri (1.3.3)
Nokogiri is an HTML, XML, SAX, and Reader parser

I have this same problem with all the user-directory install gems. What am I missing here?

EDIT: This is not a rails app. This is for a command line-application. The program will be executed by my user account, just like the tests shown above in.

EDIT: Per Rafe's suggestion, I looked at Gem.path from IRB. It only lists the system gem path, /usr/local/lib/ruby/gems/1.8, and not my user dir path as well.

like image 834
Matt Avatar asked Aug 11 '09 13:08

Matt


People also ask

Where are RubyGems stored?

When you use the --user-install option, RubyGems will install the gems to a directory inside your home directory, something like ~/. gem/ruby/1.9. 1 . The commands provided by the gems you installed will end up in ~/.

What is RubyGems in Ruby programming language?

RubyGems is a package manager for the Ruby programming language that provides a standard format for distributing Ruby programs and libraries (in a self-contained format called a "gem"), a tool designed to easily manage the installation of gems, and a server for distributing them.


2 Answers

I had the same problem, I fixed it by adding the following at the top of the ruby file

require 'rubygems'

Hope that helps

like image 186
Khaja Minhajuddin Avatar answered Sep 30 '22 17:09

Khaja Minhajuddin


My current working (but less than ideal) solution is to do a

Gem.path.push "/path/to/my/gems"

I say less than ideal because this is what I expected the contents of the .gemrc to do for me automatically, for all ruby executions under my users environment. Not sure why it doesn't - but the above at least works.

like image 20
Matt Avatar answered Sep 30 '22 17:09

Matt