Reputation: 24896
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
Upvotes: 72
Views: 49146
Reputation: 7396
This is what I use to reload a Ruby app:
.irbrc
:
def load_app
load 'app.rb'
end
alias reload_app load_app
require 'irb/helper_method'
class ReloadHelper < IRB::HelperMethod::Base
description 'Reload application'
def execute
reload_app
end
end
IRB::HelperMethod.register(:reload, ReloadHelper)
load_app
It defines the reload
helper which you call by typing reload
in an IRB session.
app.rb
in the same directory as a.irbrc
file. It can be a Sinatra app, for example.Upvotes: 0
Reputation: 187262
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.
Upvotes: 116
Reputation: 9577
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.
Upvotes: 3
Reputation: 25387
Instead of using require
, try load
. The former only loads a source file once, while the latter loads it every time you call it.
Upvotes: 43