红宝石不需要工作

Jef*_*eff 0 ruby require ruby-1.9

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

问题似乎bin/xgync取决于图书馆lib/xgync.rb.我把这个依赖写成bin/xgync如下:

$:.unshift(File.dirname(__FILE__) + '/../lib')
require "xgync"
Run Code Online (Sandbox Code Playgroud)

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

/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>'
Run Code Online (Sandbox Code Playgroud)

你能看到我写的东西有什么问题吗?符号链接可能会以某种方式搞砸了吗?

谢谢你的帮助 :)

rob*_*tus 7

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

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

require_relative '../lib/xgync.rb'
Run Code Online (Sandbox Code Playgroud)

require_relative 需要相对于您当前正在编辑的文件的文件.

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

  • 斌/ xgync
  • LIB/xgync.rb

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