如何在IRB中重新加载脚本?

pic*_*rdo 61 ruby irb

我正在编写一个用于Rails环境的Ruby脚本,但我选择从irb运行它,因为重新加载Rails控制台可能会很麻烦.现在irb的等待时间要短得多,但是我不得不重新启动irb并且每当我做出改变时都需要脚本.有没有更简单的方法从irb重新加载脚本?

我在这个帖子中找到了一个方法,但这只是显然适用于gem文件.我的require语句看起来像这样

 require "#{File.expand_path(__FILE__)}/../lib/query"
Run Code Online (Sandbox Code Playgroud)

编辑:尝试load而不是require,我仍然无法让它工作.我无法阻止这些错误.

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
Run Code Online (Sandbox Code Playgroud)

Ale*_*yne 98

在irb,File.expand_path(__FILE__)}只会回来"#{path you ran irb from}/(irb)".这会创建一个实际上不存在的路径.幸运的是,无论如何,所有文件路径都与你运行irb的位置有关.这意味着您只需要:

load "lib/query.rb"
Run Code Online (Sandbox Code Playgroud)

如果你想__FILE__在实际文件中使用它,那很好,但不要指望它在irb中产生一个有效的路径.因为irb根本没有"文件",所以它根本不能返回有效路径.

此外,__FILE__如果在通过load或require加载到irb的文件中使用,也可以正常工作.因为它有点像它.


von*_*rad 39

而不是使用require,试试load.前者仅加载一次源文件,而后者每次调用它时加载它.