制作Rubygem – 无法加载此类文件
我正在尝试使用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
我在Stackoverflow上看到了类似的错误,但是在我的具体情况下无法弄清楚出了什么问题。 我可以毫无问题地要求其他gem(不是我的gem)。 我的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
-
可执行的目录:/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:
-
ruby
-
x86_64的-达尔文-14
-
创业板路径:
-
/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/
-
壳路径:
-
/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 /本地/ Heroku的/ bin中
-
在/ usr / local / bin目录
-
在/ usr / bin中
-
/箱
-
/ usr / sbin目录
-
/ sbin目录
-
在/ usr / local / bin目录
-
在/ usr /本地/ smlnj /箱
-
-
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
spec.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指南建议你做这样的事情 (文本来自该部分的结尾):
如果您已经为gem添加了更多文件,请务必记住在发布新gem之前将它们添加到gemspec的files数组中! 出于这个原因(其中包括),许多开发人员使用Hoe , Jeweler , Rake , Bundler或仅仅是动态gemspec自动化 。
此外,您确实需要修复权限问题 ,您不需要sudo
将gem安装到您自己的主目录中。
使用rbenv(或RVM)时,不能使用sudo
来安装gem,除了“多用户”或“系统范围”类型的安装,这些安装是专门的,很少是正常/普通用户应该使用的。
sudo
将您的权限升级为root,root用户不知道用户的rbenv环境中的Rubies。 因此,root将使用默认系统Ruby,它将在那里安装文件。
相反,使用基本的gem install
,这将做正确的事情。
确保在构建gem之前将所有已修改的文件添加到github repo中然后安装build gem。