【问题标题】:How can I reload a script in IRB?如何在 IRB 中重新加载脚本?
【发布时间】:2011-06-05 15:34:27
【问题描述】:

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

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

 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

【问题讨论】:

    标签: ruby irb


    【解决方案1】:

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

    load "lib/query.rb"
    

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

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

    【讨论】:

      【解决方案2】:

      根据this link,您需要加载文件并且不要忘记扩展名。

      this link number 2 也有一个更高级的版本,对你也有帮助。

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

      【讨论】:

      • Rails 控制台加载速度太慢。我试过load,但它一直抱怨找不到文件,我确实把 rb 扩展名放在了行尾。
      • 如果此文件在您的 lib 目录中,则它已加载并且您可以/应该能够使用它,除非它在启动时出现错误。要在另一个文件中使用它,您只需将 require NameOfModuleOrClass(位于该查询文件中)添加到您的 rails 应用程序中的一个文件中。
      【解决方案3】:

      我认为load 是您正在寻找的。​​p>

      【讨论】:

      • 我试过load,但它一直抱怨找不到文件,我确实把 rb 扩展名放在了行尾。
      • 试试把文件的扩展名
      【解决方案4】:

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

      【讨论】:

      • 我尝试加载,但它一直抱怨找不到文件,我确实将 rb 扩展名放在了行尾。
      • 作为参考,请看“Ruby Require VS Load VS Include VS Extend” -- ionrails.com/2009/09/19/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2021-07-09
      • 2012-08-04
      相关资源
      最近更新 更多