gem中的require问题

时间:2013-12-09 09:54:12

标签: ruby gem require

我正在尝试制作一个有一些模块的简单宝石。但是,在我构建并安装了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

1 个答案:

答案 0 :(得分:4)

您的类文件似乎尚未添加到git,而Gemspec文件使用通用模式指定要添加到gem的文件:

spec.files = `git ls-files`.split($/)

您有两种方法可以不再遇到同样的问题:

  • 在构建gem之前将所有文件添加到版本控制中;
  • 使用spec.files中的手写Gemspec列表。

或者,如果您使用的是svn,则可能需要将spec.files更改为:

spec.files = `svn list`.split($/)

希望它有所帮助。