创造了一个简单的宝石,但是irb看不到它

时间:2012-09-23 20:51:38

标签: ruby gem

我通过以下方式创建了一个简单的gem:

  1. testgem.gemspec

    Gem::Specification.new do |s|
      s.name = 'testgem'
      s.version = '0.0.1'
      s.summary = "code generation"
      s.authors = ['asdf']
    end
    
  2. 创建了以下文件布局:

    testgem.gemspec
    Gemfile
    lib/
    lib/testgem.rb
    lib/testgem/other.rb
    
  3. 运行以下内容:

    gem build testgem.gemspec
    
    WARNING:  no description specified
    WARNING:  no email specified
    WARNING:  no homepage specified
    Successfully built RubyGem
    Name: testgem
    Version: 0.0.1
    File: testgem-0.0.1.gem
    
  4. 安装它:

    gem install ./testgem-0.0.1.gem 
    Successfully installed testgem-0.0.1
    1 gem installed
    
  5. 测试了irb是否可以看到它:

    irb
    require 'testgem'
    oadError: cannot load such file -- testgem
    
  6. 我正在使用Ruby 1.9.3-p194

    如果我这样做似乎已安装:

    gem list
    ..
    testgem (0.0.1)
    ..
    

    可能是什么问题?

3 个答案:

答案 0 :(得分:3)

您需要将库添加到搜索路径中。只需添加

$:.push File.expand_path("../lib", __FILE__)

在您的.gemspec

之上

答案 1 :(得分:1)

在Ruby中使用require时,您尝试加载文件,而不是 gem 。该文件当然可以包含在gem中,按照惯例,gem将有一个与gem本身同名的文件,这样如果你想使用gem foo,你可以使用require 'foo' 。但情况并非总是如此,例如使用require 'bcrypt'所需的bcrypt-ruby宝石。

此外,gem根本不一定要包含任何文件。一个例子是rails gem,它本身不包含任何文件(至少在版本3.2中),但是依赖于各种Rails组件,因此您可以一步安装它们。 / p>

在您的情况下,虽然您的gems项目目录中有一个lib/testgem.rb文件,但您不会将其包含在您的gem中。您需要指定哪个files should be included,默认情况下不包含任何内容。

要简单地包含项目目录中的所有文件,您可以添加以下内容:

s.files = Dir.glob '**/*'

到您的gemspec。

答案 2 :(得分:-1)

您需要先require 'rubygems'