I've been bitten by this before but it has been long enough that I forgot about the issue until it tripped me up again just now.
You've installed a gem, then go to use it and your Ruby script complains it can't find it. It does so with a cryptic message along the lines of "in 'require__': no such file to load -- postgres (LoadError)" In this example it can't find the postgres gem, which I know is installed and which 'gem list --local' tells me is installed.
Why can't it see it?
It may be that you have two versions of Ruby installed on your system. Your OS may place one in /usr/bin and you may have installed a more recent version in /usr/local/bin. That's what I have on one of my machines.
The thing is that each version has its own directory of gems. If you can't see a gem that you know is installed then you might be using the wrong installation of Ruby!
This was my problem. I have /usr/local/bin at the front of my path so I automatically pick up that installation of ruby and gem on the command line.
I had mistakenly put #!/usr/bin/ruby at the top of a script. That led the script to look for 'require'd gems in the wrong gem directory, and hence it did not find it.
You'll see some folks use "#!/usr/bin/env ruby" as the first line of their scripts. This should find the right one as it uses your PATH to find the first instance of ruby.
It's a nasty gotcha and it might explain quite a few pleas for help on Ruby mailing lists.
A collection of computer systems and programming tips that you may find useful.
Brought to you by Craic Computing LLC, a bioinformatics consulting company.
Subscribe to:
Post Comments (Atom)
1 comment:
This just bit me, I was trying to use Automator on the mac to run my ruby script. It kept failing, but ran fine from the commandline. Turns out I had two versions, /opt/local/bin and /usr/bin.
Post a Comment