【问题标题】:Rails irb default directoryRails irb 默认目录
【发布时间】:2010-09-21 10:00:58
【问题描述】:

我在运行 irb 时尝试包含源代码文件,但 irb 找不到它。

例如,假设我在终端的以下目录中:

/dan/rubyapp/

假设我在 /dan/rubyapp/ 中有一个名为“firstapp.rb”的文件

我启动 irb 并在 irb 提示符下键入

> require "firstapp.rb"

但找不到该文件。如果我输入“Dir.pwd”,它会显示为

/dan/rubyapp/

我可以让“require”工作的唯一方法是如果我像这样包含完整路径

> require "/dan/rubyapp/firstapp.rb"

这是我可以让它工作的唯一方法吗?我在网上看到的所有教程都只是“需要文件名”,所以我认为它会起作用。


这是 $: 在 irb 的输出

ruby-1.9.2-p0 > $:
 => ["/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/bin", 
"/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/lib", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1",     
"/Users/Daniel/.rvm/rubies/ruby-
1.9.2-p0/lib/ruby/1.9.1/x86_64-darwin10.4.0"] 

【问题讨论】:

    标签: ruby irb


    【解决方案1】:

    问题是当前工作目录不再在您的路径中(从 Ruby 1.9.2 开始)。有几种不同的方法可以解决这个问题。

    1) 在 ruby​​ 文件本身中,您可以使用方法 require_relative 而不是 require。这将加载一个相对于包含 require_relative 方法的文件的位置的文件: http://extensions.rubyforge.org/rdoc/classes/Kernel.html

    require_relative 'firstapp.rb'
    

    但是,这在 irb 中不起作用。

    2) 您的另一个选择是在 require 方法的参数中包含当前路径。这将在 irb 或 ruby​​ 文件中工作。例如:

    require './firstapp.rb'
    

    在 ruby​​ 中实现这一点的原因是为了避免在路径中的不同目录中存在同名的不同文件时无意中需要错误的文件(类似于 *nix 不包括当前目录“.”在其路径)

    【讨论】:

    • 这对我有帮助!然而,为了让我的工作,我必须使用正斜杠,所以require './firstapp.rb' 会更合适。
    【解决方案2】:

    有几件事可以尝试:

    1) 从 require 末尾删除 .rb ,这样你就有了:

    require 'firstapp'
    

    您通常不会将 .rb 添加到要求中(仅添加到负载中) - 请查看此处了解更多详细信息: http://www.fromjavatoruby.com/2008/10/require-vs-load.html

    2) 如果失败,请确保当前目录在您的加载路径上 - 在 irb 中执行:

     p $:
    

    它会打印出你的 ruby​​ 加载路径 - 检查“。”的条目。 (我的是最后一个条目)

    【讨论】:

    • 在我的 .irbrc 中执行 "$LOAD_PATH
    • 抱歉,错过了这条评论。但是是的。不在那里。我必须通过“$LOAD_PATH
    猜你喜欢
    • 2016-11-10
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2013-07-11
    • 2010-09-12
    相关资源
    最近更新 更多