70

我正在编写一个用于 Rails 环境的 Ruby 脚本,但我选择从 irb 运行它,因为重新加载 Rails 控制台可能会很痛苦。现在与 irb 相比,等待时间要短得多,但我很烦恼我必须重新启动 irb 并在每次进行更改时都需要脚本。有没有更简单的方法从 irb 重新加载脚本?

我在这个线程中找到了一个方法,但这显然只适用于 gem 文件。我的要求声明看起来像这样

 require "#{File.expand_path(__FILE__)}/../lib/query"

编辑:尝试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
4

4 回答 4

113

在 irb 中,File.expand_path(__FILE__)}将返回"#{path you ran irb from}/(irb)"。这会创建一条实际上并不存在的路径。幸运的是,所有文件路径都相对于您运行 irb 的位置。这意味着您只需要:

load "lib/query.rb"

如果您想__FILE__在实际文件中使用 ,那很好,但不要指望它会在 irb 中生成有效路径。因为 irb 根本没有“文件”,所以它根本无法返回有效路径。

此外,__FILE__如果在通过 load 或 require 加载到 irb 的文件中使用,也可以正常工作。因为这就是它的用途。

于 2011-01-08T10:58:07.073 回答
43

而不是使用require,尝试load。前者只加载一次源文件,而后者每次调用时都会加载它。

于 2011-01-08T03:03:01.660 回答
3

根据此链接,您需要加载文件并且不要忘记扩展名。

这是一个更高级的版本,也可以在此链接 2上使用,它也可能对您有所帮助。

您可能想尝试找出为什么您的 Rails 控制台不适合您。

于 2011-01-08T03:07:42.300 回答
1

我想load这就是你要找的。

于 2011-01-08T03:04:33.187 回答