运行 Ruby gem 时出错,但本地目录工作正常

Error when running Ruby gem but local directory works fine

我构建了一个名为 "Knitpickr" 的 gem 并将其发布到 RubyGems.org。该程序 运行 当我 运行 在其本地目录中时它很好;但是,当我安装 gem 和 运行 时,我收到以下错误消息:

/usr/local/rvm/gems/ruby-2.3.1/gems/knitpickr-0.1.8/lib/knitpickr/controller.rb
:1:in `<top (required)>': uninitialized constant Knitpickr (NameError)
        from /usr/local/rvm/gems/ruby-2.3.1/gems/knitpickr0.1.8/lib/knitpickr.
rb:4:in `require_relative'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/knitpickr-0.1.8/lib/knitpickr.
rb:4:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/knitpickr-0.1.8/bin/knitpickr:
3:in `require_relative'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/knitpickr-0.1.8/bin/knitpickr:
3:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-2.3.1/bin/knitpickr:23:in `load'
        from /usr/local/rvm/gems/ruby-2.3.1/bin/knitpickr:23:in `<main>'
        from /usr/local/rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `ev
al'
        from /usr/local/rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `<m
ain>'

我认为它出于某种原因无法识别 Knitpickr 模块命名空间。这是错误所指的代码:

class Knitpickr::Controller

我从 lib/knitpickr.rb 文件中将 gemspec 文件集(或者至少据我所知)设置为 运行,其中包括以下内容:

require 'open-uri'
require 'nokogiri'

require_relative './knitpickr/controller'
require_relative './knitpickr/scraper'
require_relative './knitpickr/version'
require_relative './knitpickr/yarn'

module Knitpickr
end

模块在那里定义,所以我很困惑为什么 "Knitpickr" 在 controller.rb 文件中被视为未初始化的常量。

最让我困惑的是为什么程序 运行 在其本地目录中运行良好,但在 运行 运行 gem 时出现错误。

gem可以安装

gem install knitpickr

有人知道发生了什么事吗?

如果您查看跟踪,knitpickr 甚至在初始化 Knitpickr 模块之前就失败了。在初始化模块之前需要控制器。

把你的模块初始化移到上面require relatives.

require 'open-uri'
require 'nokogiri'

module Knitpickr
end

require_relative './knitpickr/controller'
require_relative './knitpickr/scraper'
require_relative './knitpickr/version'
require_relative './knitpickr/yarn'