我通过以下方式创建了一个简单的gem:
testgem.gemspec
Gem::Specification.new do |s|
s.name = 'testgem'
s.version = '0.0.1'
s.summary = "code generation"
s.authors = ['asdf']
end
创建了以下文件布局:
testgem.gemspec
Gemfile
lib/
lib/testgem.rb
lib/testgem/other.rb
运行以下内容:
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
安装它:
gem install ./testgem-0.0.1.gem
Successfully installed testgem-0.0.1
1 gem installed
测试了irb是否可以看到它:
irb
require 'testgem'
oadError: cannot load such file -- testgem
我正在使用Ruby 1.9.3-p194
如果我这样做似乎已安装:
gem list
..
testgem (0.0.1)
..
可能是什么问题?
答案 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'
。