首页 文章

制作Ruby宝石 - 无法加载此类文件

提问于
浏览 1521
12

我正在尝试使用http://guides.rubygems.org/make-your-own-gem/中的说明构建Ruby gem . 以下似乎工作正常,并生成* .gem文件 .

gem build mygem.gemspec

以下似乎也是成功的(仅当以 sudo 开头):

sudo gem install mygem-0.0.1.gem

但是,当我在irb中尝试 require 'mygem' 时,我收到以下错误:

LoadError: cannot load such file -- mygem

我已经能够找出在我的具体情况下出了什么问题 . 我可以毫无问题地要求其他宝石(不是我的宝石) . 我的gem确实显示在 gem list 的输出中,但它不会加载require .

FWIW我正在使用rbenv,这对我来说是全新的 .

这是 gem env 的输出:

  • RUBYGEMS版本:2.4.5

  • RUBY VERSION:2.1.5(2014-11-13 patchlevel 273)[x86_64-darwin14.0]

  • 安装目录:/Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0

  • RUBY EXECUTABLE:/Users/speersj/.rbenv/versions/2.1.5/bin/ruby

  • EXECUTABLE目录:/Users/speersj/.rbenv/versions/2.1.5/bin

  • SPEC CACHE目录:/Users/speersj/.gem/specs

  • SYSTEM CONFIGURATION目录:/Users/speersj/.rbenv/versions/2.1.5/etc

  • RUBYGEMS PLATFORMS:

  • 红宝石

  • x86_64-darwin-14

  • GEM路径:

  • /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0

  • /Users/speersj/.gem/ruby/2.1.0

  • 创业板配置:

  • :update_sources => true

  • :verbose => true

  • :backtrace => false

  • :bulk_threshold => 1000

  • 远程来源:

  • https://rubygems.org/

  • SHELL PATH:

  • /Users/speersj/.rbenv/versions/2.1.5/bin

  • /Users/speersj/.rbenv/libexec

  • /Users/speersj/.rbenv/plugins/ruby-build/bin

  • /Users/speersj/.rbenv/shims

  • /Users/speersj/.rbenv/bin

  • /Library/Frameworks/Python.framework/Versions/3.4/bin

  • / usr / local / bin

  • / usr / local / sbin

  • / usr / local / heroku / bin

  • / usr / local / bin

  • / usr / bin

  • / bin

  • / usr / sbin

  • / sbin

  • / usr / local / bin

  • / usr / local / smlnj / bin

Gemspec:

Gem::Specification.new do |spec|
    spec.name        = 'mygem'
    spec.version     = '0.0.1'
    spec.date        = '2015-01-05'
    spec.summary     = "mygem" 
    spec.description = "Attempting to build a gem"
    spec.authors     = ["speersj"]
    spec.email       = # my email here
    spec.files       = ['lib/command.rb', 'lib/connection.rb']
    spec.homepage    = ''
    spec.license     = 'MIT'
end

3 回答

  • 16

    gemspecspec.files 条目不包含 mygem.rb 文件,因此该文件在构建时不会出现在gem中 . 只有此条目中列出的文件才会包含在最终的gem中 .

    最简单的解决方案是将 mygem.rb 添加到数组中:

    spec.files = ['lib/command.rb', 'lib/connection.rb', 'lib/mygem.rb']
    

    这是一个相当简单的修复,你可能想要做一些更灵活的事情,比如使用Dir glob

    spec.files = Dir['lib/**/*.rb']
    

    实际上Rubygems guide suggests you do something like this(文本来自该部分的结尾):

    如果您已经为gem添加了更多文件,请务必记住在发布新gem之前将它们添加到gemspec的files数组中!出于这个原因(其中包括),许多开发人员使用Hoe,Jeweler,Rake,Bundler或仅仅是动态gemspec自动化 .


    此外,您确实需要修复permissions problem,您不需要 sudo 将gems安装到您自己的主目录中 .

  • 2

    确保在构建gem之前将所有已修改的文件添加到github repo中然后安装build gem .

  • 0

    使用rbenv(或RVM)时,不能使用 sudo 来安装gem,但"multi-user"或"system-wide"类型的安装除外,这些安装是专门的,很少是正常/常规用户应该使用的 .

    sudo 将您的权限升级为root,root用户不知道用户的rbenv环境中的Rubies . 因此,root将使用默认系统Ruby,它将在那里安装文件 .

    相反,使用一个基本的 gem install ,这将做正确的事情 .

相关问题