importing GEM libraries .... newby questions

C

cugf_0956

I have installed ruby on my laptop using rpm and I installed a whole
bunch of packages using GEM. Now when I run any scripts on my laptop,
ruby can locate any package that is installed via rpm but not the one
installed via GEM. How can I make it work such that everything that is
installed using Gem can be seen by ruby.
Here is an example:
I have
/usr/lib/ruby/1.8/date
I can call "require date" in my script and it will work.

I have
/usr/lib/ruby/gems/1.8/gems/Selenium-1.0.1/bin/selenium

when I call "require selenium" it doesn't work.
What is the catch here?

Also, if I want to package my scripts to run on somebody else machine,
how can I make it, if he/she has right packages installed, can run my
scripts without errors?

And one more question, I know that Perl can be pre-compiled for better
performance, can ruby scripts be pre-compiled as well?

Thanks a lot.
 
T

Timothy Hunter

cugf_0956 said:
I have installed ruby on my laptop using rpm and I installed a whole
bunch of packages using GEM. Now when I run any scripts on my laptop,
ruby can locate any package that is installed via rpm but not the one
installed via GEM. How can I make it work such that everything that is
installed using Gem can be seen by ruby.
Here is an example:
I have
/usr/lib/ruby/1.8/date
I can call "require date" in my script and it will work.

I have
/usr/lib/ruby/gems/1.8/gems/Selenium-1.0.1/bin/selenium

when I call "require selenium" it doesn't work.
What is the catch here?

Also, if I want to package my scripts to run on somebody else machine,
how can I make it, if he/she has right packages installed, can run my
scripts without errors?

And one more question, I know that Perl can be pre-compiled for better
performance, can ruby scripts be pre-compiled as well?

Thanks a lot.
You need to have RubyGems loaded before you require any libraries that
were installed using RubyGems. You can do this:

export RUBYOPT=rubygems

or in every script that requires a gem, require 'rubygems' before
requiring any gem.
 
B

Brad Sherard

Timothy said:
cugf_0956 said:
Thanks a lot.
[...]
You need to have RubyGems loaded before you require any libraries that
were installed using RubyGems. You can do this:

export RUBYOPT=rubygems

or in every script that requires a gem, require 'rubygems' before
requiring any gem.

I have the exact problem cugf described right down to using the same gem
(selenium). I tried your first suggestion but that returned with a
compile time error. I've wasted a day digging through google links
without any luck but maybe I was searching for the wrong things. Here is
what I have:

C:\Documents and Settings\user>gem contents selenium

c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/bin/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/button.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/directory_listing_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/link.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/locator.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/selenium_server.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/server_manager.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/text_field.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/version
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/README
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/selenium-server.jar.txt
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/selenium.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/download_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/home_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/menu.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/tc_basic_operation.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/tc_selenium_server.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/README

And the (very unhelpful) example selenium provides has the following
requires:

require 'spec'
$:.unshift File.join(File.dirname(__FILE__), '..')
require 'lib/selenium'

I have no idea how to figure out what to require so I have to assume the
example is exhaustive and correct. However, just using the lines above
errors out on the first require with the reason: no such file to load.
If it is a problem of not having rubygems loaded, would someone mind
very much elaborating a bit on the 'export RUBYOPT=rubygems' stuff?
Also, is there a way to discern what values should be specified in the
require lines for a given installed gem? Is there a way to just require
individual .rb files? In advance, thank you to anyone with information.
Normally I wouldn't dare asking such simple questions but I cannot
figure this out.
 
B

Brian Candler

I have the exact problem cugf described right down to using the same gem
(selenium). I tried your first suggestion but that returned with a
compile time error.

There is no "compile time" in Ruby.

Post the snippet of code you were trying to run, and the exact error
message.
C:\Documents and Settings\user>gem contents selenium

c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/bin/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/button.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/directory_listing_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/link.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/locator.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/selenium_server.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/server_manager.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/text_field.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/version
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/README
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/selenium-server.jar.txt
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/selenium.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/download_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/home_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/menu.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/tc_basic_operation.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/tc_selenium_server.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/README

And the (very unhelpful) example selenium provides has the following
requires:

require 'spec'
$:.unshift File.join(File.dirname(__FILE__), '..')
require 'lib/selenium'

As suggested by earlier posters, try:

require 'rubygems'
require 'selenium'

and if it doesn't work, post the entire error message you see.

Brian.
 
T

Timothy Hunter

Brad said:
Timothy said:
cugf_0956 said:
Thanks a lot.
[...]
You need to have RubyGems loaded before you require any libraries that
were installed using RubyGems. You can do this:

export RUBYOPT=rubygems

or in every script that requires a gem, require 'rubygems' before
requiring any gem.

I have the exact problem cugf described right down to using the same gem
(selenium). I tried your first suggestion but that returned with a
compile time error. I've wasted a day digging through google links
without any luck but maybe I was searching for the wrong things. Here is
what I have:

C:\Documents and Settings\user>gem contents selenium

c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/bin/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/button.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/directory_listing_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/link.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/locator.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/selenium_server.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/server_manager.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/text_field.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/version
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/README
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/selenium-server.jar.txt
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/lib/selenium/openqa/selenium.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/download_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/home_page.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/menu.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/tc_basic_operation.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/spec/selenium/tc_selenium_server.rb
c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.0.1/README

And the (very unhelpful) example selenium provides has the following
requires:

require 'spec'
$:.unshift File.join(File.dirname(__FILE__), '..')
require 'lib/selenium'

I have no idea how to figure out what to require so I have to assume the
example is exhaustive and correct. However, just using the lines above
errors out on the first require with the reason: no such file to load.
If it is a problem of not having rubygems loaded, would someone mind
very much elaborating a bit on the 'export RUBYOPT=rubygems' stuff?
Also, is there a way to discern what values should be specified in the
require lines for a given installed gem? Is there a way to just require
individual .rb files? In advance, thank you to anyone with information.
Normally I wouldn't dare asking such simple questions but I cannot
figure this out.
Libraries installed by RubyGems must be loaded by RubyGems. RubyGems
does this by replacing the standard "require" method with its own
version. To make this happen though, rubygems.rb must be required by the
normal require method. So, the simplest (although least satisfactory)
thing to do is require "rubygems" before requiring anything else.

require "rubygems" # uses normal require method, adds its own require
method
require "somegem" # uses RubyGems require

Make sense? Okay. You can of course require a library on the command
line using the -r option:

ruby -r rubygems myprog.rb

The space between -r and rubygems is not necessary:

ruby -rrubygems myprog.rb

Somebody smart on the RubyGems team realized that they could create a
file called "ubygems.rb" and then you could run Ruby like this:

ruby -rubygems myprog.rb

Still with me? One more step. You can specify Ruby options in the
RUBYOPT environment variable. Since these options aren't on the command
line, they don't need the little "-" in front to distinguish them from
non-option things.

export RUBYOPT=rubygems

is the same thing as "-rubygems". You'll probably want to put the export
command in your .profile file (assuming you're on a *nix-like system).
If you're on Windows, set environment variables using Control
Panel->System (iirc).

Lastly, once you've ensured that rubygems is loaded, all you need to do
is require the .rb file you need. RubyGems takes care of figuring out
where it's at so you don't need to.

Here's the scoop on RubyGems: http://docs.rubygems.org/read/book/1
 
E

Eric Hodel

I have installed ruby on my laptop using rpm and I installed a whole
bunch of packages using GEM. Now when I run any scripts on my laptop,
ruby can locate any package that is installed via rpm but not the one
installed via GEM. How can I make it work such that everything that is
installed using Gem can be seen by ruby.

You must require rubygems first. You can set RUBYOPT=-rubygems in
your shell environment to make sure rubygems is always loaded.
 

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

Similar Threads

gem error 1
sudo gem install mysql problem 5
fxruby gem problem 9
Vendored Oniguruma gem MissingSourceFile oregexp 2
rrdtool gem 3
Can't find Gem 0
Can't load gem 5
gem installation oddity 5

Members online

Forum statistics

Threads
473,997
Messages
2,570,240
Members
46,828
Latest member
LauraCastr

Latest Threads

Top