When I require a file, for example (called st.rb):
require 'rubygems'
require 'mongrel'
class TestHandler < Mongrel::HttpHandler
def process(request, response)
response.start(200) do |head, out|
head["Content-Type"] = "text/html"
out.write "Hello, World!\n"
end
end
end
in irb I get:
>> require 'st.rb'
LoadError: cannot load such file -- st.rb
from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from (irb):3
from /usr/local/bin/irb:12:in `<main>'
I might have a clue, but it's just a guess. My ruby version/install location is:
/usr/local/bin/ruby
and ruby 1.9.3p0
yet, ruby gems is in /usr/local/lib/ruby/1.9.1
and it's talking about version 1.9.1
. Could this possibly be the reason?
Thanks!
UPDATE Weird, when I type 'puts RUBY_VERSION' in IRB, I get this:
puts RUBY_VERSION
1.9.3
NoMethodError: undefined method `write' for nil:NilClass
from /usr/local/lib/ruby/1.9.1/irb.rb:311:in `printf'
from /usr/local/lib/ruby/1.9.1/irb.rb:311:in `output_value'
from /usr/local/lib/ruby/1.9.1/irb.rb:160:in `block (2 levels) in eval_input'
from /usr/local/lib/ruby/1.9.1/irb.rb:273:in `signal_status'
from /usr/local/lib/ruby/1.9.1/irb.rb:156:in `block in eval_input'
from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement'
from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'
from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement'
from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'
from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'
from /usr/local/lib/ruby/1.9.1/irb.rb:155:in `eval_input'
from /usr/local/lib/ruby/1.9.1/irb.rb:70:in `block in start'
from /usr/local/lib/ruby/1.9.1/irb.rb:69:in `catch'
from /usr/local/lib/ruby/1.9.1/irb.rb:69:in `start'
from /usr/local/bin/irb:12:in `<main>'
Maybe IRB bug!
>>
The directory where
st.rb
lives is most likely not on your load path.Assuming that
st.rb
is located in a directory calledlib
relative to where you invokeirb
, you can add thatlib
directory to the list of directories that ruby uses to load classes or modules with this:For example, in order to call the module called 'foobar' (foobar.rb) that lives in the
lib
directory, I would need to first add thelib
directory to the list of load path. Here, I am just appending thelib
directory to my load path:EDIT Sorry, I completely missed the fact that you are using ruby 1.9.x. All accounts report that your current working directory has been removed from
LOAD_PATH
for security reasons, so you will have to do something like inirb
:I just came across a similar problem. Try
This should do the trick.
I created my own Gem, but I did it in a directory that is not in my load path:
Then I ran
irb
and tried to load the Gem:I used the global variable $: to inspect my load path and I realized I am using RVM. And rvm has specific directories in my load path
$:
. None of those directories included my ~/projects directory where I created the custom gem.So one solution is to modify the load path itself:
Note that the lib directory is in the path, which holds the my_gem.rb file which will be required in irb:
Now if you want to install the gem in RVM path, then you would need to run:
But it will need to be in a repository like rubygems.org.
The problem shall have solved if you specify your path.
e.g.
"require 'st.rb'" --> "require './st.rb'"
See if your problem get solved or not.
For security & other reasons, ruby does not by default include the current directory in the load_path. You may want to check this for more details - Why does Ruby 1.9.2 remove "." from LOAD_PATH, and what's the alternative?