我正在尝试在运行irb时包含源代码文件,但是irb无法找到它.
例如,假设我在终端的以下目录中:
/dan/rubyapp/
Run Code Online (Sandbox Code Playgroud)
假设我在/ dan/rubyapp /中有一个名为"firstapp.rb"的文件
我启动irb并从irb提示符输入
> require "firstapp.rb"
Run Code Online (Sandbox Code Playgroud)
但无法找到该文件.如果我输入"Dir.pwd",则显示为
/dan/rubyapp/
Run Code Online (Sandbox Code Playgroud)
我可以"需要"工作的唯一方法是,如果我包括这样的完整路径
> require "/dan/rubyapp/firstapp.rb"
Run Code Online (Sandbox Code Playgroud)
这是我能让这个工作的唯一方法吗?我在网上看到的所有教程都只是"需要file_name",所以我认为它会起作用.
这是来自$:at 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"]
Run Code Online (Sandbox Code Playgroud)
问题是当前的工作目录不再在你的路径中(从Ruby 1.9.2开始).围绕这个问题有几种不同的方法.
1)在ruby文件本身中,您可以使用require_relative方法而不是require方法.这将加载相对于包含require_relative方法的文件的loaction的文件:http://extensions.rubyforge.org/rdoc/classes/Kernel.html
require_relative 'firstapp.rb'
Run Code Online (Sandbox Code Playgroud)
然而,这在irb中不起作用.
2)你的另一个选择是在你的参数中包含require方法的当前路径.这将在irb或ruby文件中使用.例如:
require './firstapp.rb'
Run Code Online (Sandbox Code Playgroud)
在ruby中实现这个的原因是为了避免在路径中的不同目录中存在具有相同名称的不同文件时无意中需要错误的文件(类似于*nix在其路径中不包括当前目录".")
有几点需要尝试:
1)从你的需求末尾删除.rb,这样你就有:
require 'firstapp'
Run Code Online (Sandbox Code Playgroud)
您通常不会将 .rb 添加到 require (仅添加到加载) - 请查看此处以获取更多详细信息: http://www.fromjavatoruby.com/2008/10/require-vs-load.html
2) 如果失败,请确保当前目录位于您的加载路径上 - 在 irb 中执行:
p $:
Run Code Online (Sandbox Code Playgroud)
它会打印出你的 ruby 加载路径 - 检查“.”条目。(我的是最后一个条目)