-1

我有一个我的宝石包装纸,袜子,里面socks.rb。整个文件由 require 语句和一个模块声明组成:

# lib/socks.rb
require 'socks/version'
require 'socks/base_controller'
require 'socks/templates'
require 'socks/tasks'
require 'socks/rake_tasks'

module Socks
end

但是,require 'socks/tasks'并且socks/rake_tasks给了我一个LoadError: no such file to load -- socks/tasks/rake_tasks错误。

这是 require 语句的对齐问题,还是只是代码的问题?

代码在 Github: https ://github.com/Beakr/socks

编辑require './socks/tasks'现在正在工作,但require './socks/rake_tasks'不是。

4

1 回答 1

1

Ruby 使用它的$LOAD_PATH. 这个全局数组被 ruby​​gems 和 bundler 更改,以允许在不同位置查找库。在您sock.gemspec的定义中

gem.require_paths = ["lib"]

这意味着 ruby​​gems 会将lib您的 gem 的目录添加到 ruby​​ 的$LOAD_PATH. 但它只有在您安装了 gem 并且 gemspec 被评估时才会如此。如果您不想安装 gem,可以使用

bundle exec irb

在您的 gem 目录中,或者通过首先调整您$LOAD_PATH的 irb 会话,如下所示:

$LOAD_PATH.push "/path/to/your/gem/lib"
require 'socks'
于 2012-04-29T22:48:53.417 回答