How can I reload a script in IRB?
RubyIrbRuby Problem Overview
I am writing a Ruby script for use in the Rails environment, but I chose to run it from irb because reloading the Rails console can be a pain. Now the wait time is much shorter from irb, but I'm bothered that I have to restart irb and require the script everytime I make a change. Is there a simpler way of reloading a script from irb?
I found a method in this thread, but that only applies to gem files apparently. My require statement looks like this
require "#{File.expand_path(__FILE__)}/../lib/query"
EDIT: Having tried load
rather than require
, I still couldn't get it to work. I can't get a stop on these errors.
ruby-1.9.2-p0 > load "#{File.expand_path(__FILE__)}/../lib/query.rb"
LoadError: no such file to load -- /Users/newuser/Dropbox/Sites/rails/hacknyc/(irb)/../lib/query.rb
Ruby Solutions
Solution 1 - Ruby
In irb, File.expand_path(__FILE__)}
will just return "#{path you ran irb from}/(irb)"
. Which creates a path that doesn't actually exist. Luckily all file paths are relative to where you ran irb anyway. This means all you need is:
load "lib/query.rb"
If you want to use the __FILE__
in an actual file, that's fine, but don't expect it to produce a valid path in irb. Because an irb there is no "file" at all, so it cannot return valid path at all.
Also, __FILE__
will work fine if used in a file loaded into irb via load or require. Cause that's kinda what it's for.
Solution 2 - Ruby
Instead of using require
, try load
. The former only loads a source file once, while the latter loads it every time you call it.
Solution 3 - Ruby
according to this link you need to load your file and do not forget the extention.
Here is a fancier version to use too at this link number 2 which could be helpful for you too.
You may want to try hashing out why your rails console isn't working for you though.
Solution 4 - Ruby
I think load
is what you are looking for.