3

我正在开发一个简单的 ruby​​ gem,其中我需要额外的类。以下是我的 gemname/lib 目录的文件:

lib/
   gemname/
          base.rb
          version.rb
   gemname.rb

我已将声明包含require "gemname/base"在我的 gemname.rb 中。

在本地构建和安装 gem 并转到irbandrequire gemname后,我收到以下错误:

LoadError: cannot load such file -- ./gemname/base
    from /home/swaroop/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require'
    from /home/swaroop/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require'
    from /home/swaroop/.rvm/gems/ruby-2.0.0-p0/gems/gemname-0.0.6/lib/gemname.rb:2:in `<top (required)>'
    from /home/swaroop/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:116:in `require'
    from /home/swaroop/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:116:in `rescue in require'
    from /home/swaroop/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:122:in `require'
    from (irb):1
    from /home/swaroop/.rvm/rubies/ruby-2.0.0-p0/bin/irb:13:in `<main>'

我哪里错了?

4

2 回答 2

5

您的gemname.gemspec文件应该包含这样的内容。

spec.files = `git ls-files -z`.split("\x0")

您收到错误消息是因为您没有使用 git 对文件进行版本控制。如果你rake install在使用之前运行git然后如果你这样做

irb
require "gemname"

这会引发错误。

这就是为什么。像这样查看它的安装路径。

gem list -d gemname  # this should return something like this

gemname (0.0.1)
    Author: your name
    License: MIT
    Installed at: /Users/your_name/.rbenv/versions/2.0.0/lib/ruby/gems/2.0.0

打开该位置并找到您的 gem 文件夹。你应该看到nothing那里。

现在,将您的文件添加到 git 并至少提交一次。

git init
git add .
git commit -m "init"

然后做rake install并且要求它不应该引发错误。

irb
require "gemname" # no error, and you should see files in this gem's install folder.
于 2014-02-06T14:20:26.083 回答
2

在你的lib/gemname.rb

require 'gemname/base.rb'

gemname.specification 文件中的希望有

s.files = Dir["README.md","Gemfile","Rakefile", "spec/*", "lib/**/*"]

例如看我的宝石

https://github.com/rajcybage/google_book

或者

http://rubygems.org/gems/google_book

于 2013-09-02T10:52:37.227 回答