可执行文件 "require" 找不到它自己的库

Executable "require" can't find it's own library

我正在用一个可执行文件和一个 class 库制作一个 ruby gem。可执行文件有 require "fpa/chklinks",它是 lib/fpa 目录中的 class 库。

当我 运行 我的名为 chklinks.rb 的可执行文件时出现以下错误:

$ bin/chklinks.rb -h
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- fpa/chklinks (LoadError)
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from bin/chklinks.rb:7:in `<main>'

如何让它在开发过程中找到我的库?我试过了require_relative "../lib/fpa/chklinks"

您的 gem 应该有一个 lib 目录。在开发过程中,您需要将该 lib 目录添加到 Ruby 的加载路径中。

您可以在 Ruby 代码中添加它。我不建议在你的情况下这样做,但将这样的东西放在你的测试助手或规范助手文件中以帮助你的测试找到库是有帮助的:

$LOAD_PATH << 'lib'

您可以使用 Ruby 命令行选项或环境变量添加它:

RUBYOPT="-Ilib" ruby bin/chklinks.rb
ruby -Ilib bin/checklinks.rb

我假设上面的命令是 运行 来自 gem 的根目录,因此您需要添加的路径只是 lib。如果您的设置不同,您可以将上面命令中的 lib 更改为其他路径。

我通过将以下内容添加到我的 require 语句上方的可执行文件中解决了这个问题:

$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)

根据大卫格雷森的 post $LOAD_PATH << 'lib'

虽然这成功了。有没有更好的地方,因为我想我必须在生产前注释掉这一行?

谢谢