Ruby无法加载此类文件 - 但可以在同一目录中加载类似的文件

时间:2016-12-26 23:07:44

标签: ruby git rubygems

有很多“无法加载此类文件”的问题,但我找不到符合我情景的问题。

我正在使用普通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个​​文件?

1 个答案:

答案 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