我是红宝石的新手,但我正在制作我的第一个红宝石计划。它目前有两个文件,一个是函数库(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>'
你能看到我写的东西有什么问题吗?符号链接可能会以某种方式弄乱它吗?
感谢您的帮助:)
答案 0 :(得分:7)
使用 ruby 1.9.x 时,在项目中需要其他文件时,通常不会使用$:.unshift
更改路径。
相反,最佳做法是改为使用require_relative
。
require_relative '../lib/xgync.rb'
require_relative
需要与您当前正在编辑的文件相关的文件。
但是您遇到的错误会出现,因为您需要一个不存在的文件:
根据您的问题,这些是项目中的文件,代码摘录来自 bin / xgync 您扩展了路径以查找 lib / 中的文件但你尝试require 'xgync'
这是一个文件, lib / 中没有,所以如果你想使用这种方法(而不是require_relative
你必须使用require 'xgync.rb'
。