红宝石不需要工作

时间:2012-07-22 12:09:12

标签: ruby require ruby-1.9

我是红宝石的新手,但我正在制作我的第一个红宝石计划。它目前有两个文件,一个是函数库(xgync.rb存储在lib中),另一个是存储在'bin'中的可执行文件xgync。 (项目可见https://bitbucket.org/jeffreycwitt/xgync/src)我还为/usr/local/bin/xgync创建了一个符号链接,以便我可以从终端的任何位置编写命令xgync {arguments}

问题似乎是bin/xgync取决于库lib/xgync.rb。我在bin/xgync中编写了这个依赖项,如下所示:

$:.unshift(File.dirname(__FILE__) + '/../lib')
require "xgync"

但是,我不断收到以下错误:

/Users/JCWitt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- xgync (LoadError)
from /Users/JCWitt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /usr/local/bin/xgync:4:in `<main>'
你能看到我写的东西有什么问题吗?符号链接可能会以某种方式弄乱它吗?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:7)

使用 ruby​​ 1.9.x 时,在项目中需要其他文件时,通常不会使用$:.unshift更改路径。

相反,最佳做法是改为使用require_relative

require_relative '../lib/xgync.rb'

require_relative需要与您当前正在编辑的文件相关的文件。

但是您遇到的错误会出现,因为您需要一个不存在的文件:

  • 仓/ xgync
  • LIB / xgync.rb

根据您的问题,这些是项目中的文件,代码摘录来自 bin / xgync 您扩展了路径以查找 lib / 中的文件但你尝试require 'xgync'这是一个文件, lib / 中没有,所以如果你想使用这种方法(而不是require_relative你必须使用require 'xgync.rb'