ruby - 创建 ruby gem

标签 ruby

我正在学习 ruby​​,我想测试如何创建 gem 文件。我的机器上安装了以下内容。 ruby 1.9.3p362(2012-12-25 修订版 38607)[x86_64-linux] bundler 版本 1.2.3 rake ,版本 10.0.3

我使用bundle gem hello_gem创建了一个gem。我将以下示例代码添加到 hello_gem.rb

module HelloGem
  class Base
    def self.hello
      puts "Hello Ruby Gem #{HelloGem::VERSION}"
    end
  end
end  

我的文件夹结构如下。

├── Gemfile
├── Gemfile.lock
├── hello_gem.gemspec
├── lib
│   ├── hello_gem
│   │   └── version.rb
│   └── hello_gem.rb
├── LICENSE.txt
├── Rakefile
├── README.md

然后我使用rake install创建了gem。然后我启动了 irb,我可以执行以下操作。

1.9.3-p362 :001 > require 'hello_gem'
 => true 
1.9.3-p362 :002 > HelloGem::Base.hello
Hello Ruby Gem 0.0.1
 => nil 
1.9.3-p362 :003 > 

当我想将代码移动到 lib 文件夹时出现问题。我创建了 lib/hello_gem/base.rb 并在其中添加了上述代码。在 hello_gem.rb 中,我刚刚使用了 require "hello_gem/base"。现在我的项目如下所示。

├── Gemfile
├── Gemfile.lock
├── hello_gem.gemspec
├── lib
│   ├── hello_gem
│   │   ├── base.rb
│   │   └── version.rb
│   └── hello_gem.rb
├── LICENSE.txt
├── Rakefile
├── README.md

当我使用rake install构建gem并使用irb来测试发生以下错误时。

1.9.3-p362 :001 > require 'hello_gem'
LoadError: cannot load such file -- hello_gem/base
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/sandarenu/.rvm/gems/ruby-1.9.3-p362/gems/hello_gem-0.0.1/lib/hello_gem.rb:2:in `<top (required)>'
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
from (irb):1
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
1.9.3-p362 :002 > 

我找不到解决此问题的方法。如果有人能告诉我我在这里做错了什么,那将是一个很大的帮助。

提前致谢。

最佳答案

.gemspec创建者 bundle gem使用Git确定要包含在 gem 中的文件;它包含行:

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

为了让它添加您的 hello_gem/base.rb您需要将其添加到 Git 存储库。由于原始设置适合您,我假设您已经安装了 Git,因此您只需运行:

git add lib/hello_gem/base.rb

您实际上不需要提交 git ls-files 的文件拾取它并将其添加到 gem 中,因此这应该足以让它工作。

关于ruby - 创建 ruby gem ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451970/

相关文章:

ruby-on-rails - Ruby - 合并两个数组并删除重复的值

javascript - Rails 和 React - React.createClass/React.createReactClass 不是函数

html - 瓦蒂尔 : How do I find an element where the class of that element and the class of one of its parents identifies it?

javascript - 在 javascript 函数中设置 ruby​​ 实例变量

ruby-on-rails - 如果花费的时间超过 X 秒,则退出线程

javascript - Ruby on Rails - 包含 View 文件夹中的 javascript 文件

ruby - 用macrubyc编译的ruby代码可以使用gems吗

mysql - 如何修复具有许多表的数据库而不使用 Rails 匹配迁移

ruby-on-rails - Rails 4.0 未定义方法 `+' 为 nil :NilClass

ruby - 在 ubuntu 14.0.4 (Ruby 1.8.7) 中安装 nokogiri 时出错