【发布时间】:2013-12-26 09:13:13
【问题描述】:
我正在尝试制作一个包含一些模块的简单 gem。但是,在我构建并安装 gem 并尝试在脚本中 require 它之后,我收到一个错误:
from ...ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- my_gem/some_class (LoadError)
和
from ...ruby-1.9.3-p429/gems/my_gem-0.0.1/lib/my_gem.rb:2:in `<top (required)>'
my_gem.rb 中的第 2 行是 require "my_gem/some_class。
据我了解 (from this question),问题似乎是找不到我需要的文件。
发生了什么事?为什么我不能在 gem 中要求我自己的文件?
我想要的文件在 version.rb 的“旁边”。
#File Structure
#
# root
# |->lib
# | |->my_gem.rb
# | |->my_gem
# | | |->some_class.rb
# | | |->some_class2.rb
# | | |->version.rb
SomeClass 看起来像这样:
module MyGem
class SomeClass
def self.someMethod
...
end
end
我在收到错误的脚本中所做的一切如下:
#!/usr/bin/ruby
require "rubygems"
require "my_gem"
宝石规格:
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'my_gem/version'
Gem::Specification.new do |spec|
spec.name = "my_gem"
spec.version = MyGem::VERSION
spec.authors = ["My Name"]
spec.email = ["my_email@gmail.com"]
spec.description = %q{A simple Ruby gem that fails.}
spec.summary = %q{Failing gem for Ruby.}
spec.homepage = "http://some.website.com"
spec.license = "MIT"
spec.files = `git ls-files`.split($/)
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.3"
spec.add_development_dependency "rake"
end
【问题讨论】:
-
是否找到文件取决于它们的路径。请编辑您的问题,以包含调用文件的文件名和文件夹名称(相对于项目根目录)以及您想要
require的文件。 -
您是否也向我们提供您的
Gemspec:您确定您已包含所有文件吗? -
好了。目录结构和 gemspec。也许我在 gemspec 中做错了什么
-
请从控制台运行
git ls-files并发布结果。你把你所有的类文件都添加到 git 了,不是吗? -
嗯,明确的词。我不知道您需要向 git 提交内容才能构建 gem。为什么这个设计决定?如果我想使用 git 以外的东西进行版本控制怎么办? (顺便说一句。随意添加作为答案)