gem query finds gem, yet require fails

M

Michael Glaesemann

I'm setting up a secondary machine to run tests. I've run into a
problem with gems not being found. Everything works fine on my
primary machine, and I haven't been able to tease out what the
difference is in the two setups.

I've installed Ruby 1.8.5 and rubygems 0.9.0, both from source, on
Mac OS X 10.4.8.
Ruby configuraiton:
$ ./configure --prefix=/usr/local

rubygems installation:
$ sudo /usr/local/bin/ruby setup.rb

I installed the PostgreSQL bindings gem using:
$ sudo gem install postgres

The bindings appeared to install correctly. Using gem query, I can see:


*** LOCAL GEMS ***

postgres (0.7.1)
The extension library to access a PostgreSQL database from Ruby.

sources (0.0.1)
This package provides download sources for remote gem installation

However, when testing with irb to see if the postgres gem can be
found, I get:

$ which ruby
/usr/local/bin/ruby
$ which irb
/usr/local/bin/irb
$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'postgres'
LoadError: no such file to load -- postgres
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:27:in `gem_original_require'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:27:in `require'
from (irb):2

I'm stumped. On my primary machine, the above two commands work just
fine in irb.

Looking around custom_require.rb and seeing the private init_gemspecs
method, I tried:
irb(main):006:0> gs = Gem::GemPathSearcher.new
...
irb(main):017:0> pp gs.send:)init_gemspecs)

I can see the postgres gem included in the list (relevant part of the
output is posted below).

However, the find method fails:

irb(main):018:0> gs.find('postgres')
=> nil

The default dir appears to be correct:

irb(main):020:0> Gem.default_dir
=> "/usr/local/lib/ruby/gems/1.8"

In the shell:
$ ls -la /usr/local/lib/ruby/gems/1.8
total 4040
drwxr-xr-x 7 root wheel 238 Nov 12 22:11 .
drwxr-xr-x 3 root wheel 102 Nov 12 22:10 ..
drwxr-xr-x 11 root wheel 374 Nov 12 22:24 cache
drwxr-xr-x 10 root wheel 340 Nov 12 22:24 doc
drwxr-xr-x 11 root wheel 374 Nov 12 22:24 gems
-rw-r--r-- 1 root wheel 2066469 Nov 12 22:12 source_cache
drwxr-xr-x 11 root wheel 374 Nov 12 22:24 specifications

Any help would be appreciated. I've been staring at this for quite a
while now and nothing new is coming to me. I don't have any GEM_*
environmental variables or .gemrc files on either machine. Anything
else I should try or check?

Thanks!

Michael Glaesemann
grzm seespotcode net

### partial init_gemspecs output
#<Gem::Specification:0x585ffc
@authors=[],
@autorequire="postgres",
@bindir="bin",
@cert_chain=nil,
@date=Wed Oct 20 00:00:00 +0900 2004,
@default_executable=nil,
@dependencies=[],
@email="(e-mail address removed)",
@executables=[],
@extensions=["extconf.rb"],
@extra_rdoc_files=[],
@files=
["ChangeLog",
"doc",
"extconf.rb",
"MANIFEST",
"postgres-ruby.gemspec",
"postgres.c",
"README",
"README.ja",
"sample",
"doc/postgres.html",
"doc/postgres.jp.html",
"sample/losample.rb",
"sample/psql.rb",
"sample/psqlHelp.rb",
"sample/test1.rb",
"sample/test2.rb",
"sample/test4.rb"],
@has_rdoc=false,
@homepage="http://www.postgresql.jp/interfaces/ruby/",
 
M

Michael Glaesemann

The bindings appeared to install correctly. Using gem query, I can
see:


*** LOCAL GEMS ***

postgres (0.7.1)
The extension library to access a PostgreSQL database from Ruby.

sources (0.0.1)
This package provides download sources for remote gem installation

However, when testing with irb to see if the postgres gem can be
found, I get:

$ which ruby
/usr/local/bin/ruby
$ which irb
/usr/local/bin/irb
$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'postgres'
LoadError: no such file to load -- postgres
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:27:in `gem_original_require'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:27:in `require'
from (irb):2

I'm stumped. On my primary machine, the above two commands work
just fine in irb.

Any ideas at all on this? I'm really stuck. Or perhaps how to make
sure I've completely uninstalled Ruby and rubygems so I can maybe try
installing again?

As an aside, how could I make this message more likely to get a
response? I seem to have lost my knack.

Thanks for any suggestions on either issue :)

Michael Glaesemann
grzm seespotcode net
 
J

Jan Svitok

Any ideas at all on this? I'm really stuck. Or perhaps how to make
sure I've completely uninstalled Ruby and rubygems so I can maybe try
installing again?

As an aside, how could I make this message more likely to get a
response? I seem to have lost my knack.

Thanks for any suggestions on either issue :)

Michael Glaesemann
grzm seespotcode net

Hi,

[I don't know anything about neither OSX nor postgres gem]

- it seems you have require patched, so gems are in the game. that's fine.
- postgres from the listing seems to have compiled extension. Check
whether it is indeed compiled - you'll have postgres.so somewhere in
the dir. If it's not there look for info how to setup build
environment
- check whether the ext is directly in lib or somewhere deeper - i.e.
require 'whatever/postgres'
- go there, try require it from the dir where it is without rubygems
if you can't the problem is somewhere deeper.

For example, on debian&co you have to have installed build-essential
package. Without it, the ext won't be compiled however gem will
install fine and don't tell anything.
 
M

Michael Glaesemann

- it seems you have require patched, so gems are in the game.
that's fine.

Thanks for confirming that. Good to have a second opinion.
- postgres from the listing seems to have compiled extension. Check
whether it is indeed compiled - you'll have postgres.so somewhere in
the dir. If it's not there look for info how to setup build
environment

This is very helpful. I hadn't thought to check this. I can see that
there *is* a postgres.o on the system that works, but it's missing on
the system that doesn't. This gives me something to pursue.
- check whether the ext is directly in lib or somewhere deeper - i.e.
require 'whatever/postgres'
- go there, try require it from the dir where it is without rubygems
if you can't the problem is somewhere deeper.

For example, on debian&co you have to have installed build-essential
package. Without it, the ext won't be compiled however gem will
install fine and don't tell anything.

From the system where it works, the postgres.o file is in the top-
level of the postgres-0.7.1 directory (i.e., /usr/local/lib/ruby/gems/
1.8/gems/postgres-0.7.1/postgres.o) so this is probably not a
problem, but it's also something for me to check when I figure out
why the postgres.o file isn't getting built.

Thanks for the pointers, Jan. This is really helpful, and gives me
something to work on :)

Michael Glaesemann
grzm seespotcode net
 
J

Jan Svitok

Thanks for confirming that. Good to have a second opinion.


This is very helpful. I hadn't thought to check this. I can see that
there *is* a postgres.o on the system that works, but it's missing on
the system that doesn't. This gives me something to pursue.


From the system where it works, the postgres.o file is in the top-
level of the postgres-0.7.1 directory (i.e., /usr/local/lib/ruby/gems/
1.8/gems/postgres-0.7.1/postgres.o) so this is probably not a
problem, but it's also something for me to check when I figure out
why the postgres.o file isn't getting built.

Thanks for the pointers, Jan. This is really helpful, and gives me
something to work on :)

Glad to help. Try googling for other compiled gems' problems on OSX -
e.g. mysql, mongrel, rcov, ruby-prof.
 
M

Michael Glaesemann

This is very helpful. I hadn't thought to check this. I can see
that there *is* a postgres.o on the system that works, but it's
missing on the system that doesn't. This gives me something to pursue.

I was able to install the postgres bindings by explicitly calling

sudo ruby extconf.rb --with-pgsql-lib-dir=/usr/local/lib/ --with-
pgsql-include-dir=/usr/local/include
sudo make
sudo make install

Passing those same compilation flags through gem didn't work and I'm
not sure why.

sudo gem install postgres -- --with-pgsql-lib-dir=/usr/local/lib/ --
with-pgsql-include-dir=/usr/local/include

No errors were thrown; the source just didn't get compiled

Thanks again, Jan, for your help!

Michael Glaesemann
grzm seespotcode net
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top