有很多“无法加载此类文件”的问题,但我找不到符合我情景的问题。
我正在使用普通bundler method构建一个gem。开发和测试已经完成到令人满意的地步。所有实际文件都在/ lib / my_gem文件夹中。然后我构建了一个名为/lib/my_gem/cli.rb的CLI。就像该文件夹中的所有其他文件一样,它们都在模块MyGem中。
我将文件/ lib / my_gem改为这样读。改名称是为了保护无辜者。
require "my_gem/version"
require "my_gem/file1"
require "my_gem/file2"
require "my_gem/file3"
require "my_gem/file4"
require "my_gem/file5"
require "my_gem/file6"
require "my_gem/cli"
module MyGem
# Nothing
end
然后我使用rake build
构建了gem,并使用gem install
安装了gem。然而,当我将require 'my_gem'
放入另一个ruby文件并运行它时,我得到....
C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kerel_require.rb:55 in 'require' cannot load such file - my_gem/cli (LoadError)
但是 - 如果我在上面的代码段中注释掉第8行,那么一切正常。我无法理解为什么require
适用于前7个文件但不适用于第8个文件?
答案 0 :(得分:1)
文件必须列在gemspec
文件中。
通常的做法是将git推迟到文件列表中。
您评论说您的gemspec看起来像这样
spec.files = git ls-files -z.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]
也许你的文件没有提交给git?是否列出git ls-files
?