我正在尝试制作一个有一些模块的简单宝石。但是,在我构建并安装了gem并尝试在脚本中使用它后,我收到一个错误:
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"
Gemspec:
# 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
答案 0 :(得分:4)
您的类文件似乎尚未添加到git
,而Gemspec
文件使用通用模式指定要添加到gem
的文件:
spec.files = `git ls-files`.split($/)
您有两种方法可以不再遇到同样的问题:
spec.files
中的手写Gemspec
列表。或者,如果您使用的是svn
,则可能需要将spec.files
更改为:
spec.files = `svn list`.split($/)
希望它有所帮助。