制作 Ruby Gem - 无法加载此类文件
Making a Ruby Gem - Cannot Load Such File
我正在尝试使用 http://guides.rubygems.org/make-your-own-gem/ 中的说明构建 Ruby gem。以下似乎工作正常并生成一个 *.gem 文件。
gem build mygem.gemspec
以下似乎也是成功的(仅当以 sudo
开头时):
sudo gem install mygem-0.0.1.gem
但是,当我尝试 require 'mygem'
inside irb 时,出现以下错误:
LoadError: cannot load such file -- mygem
我在 Whosebug 上看到过类似的错误,但无法弄清楚我的具体情况出了什么问题。我可以毫无问题地要求其他 gems(不是我的)。我的 gem 确实出现在 gem list
的输出中,但它不会加载 require.
FWIW 我正在使用 rbenv,这对我来说是全新的。
这是gem env
的输出:
RUBYGEMS 版本:2.4.5
RUBY 版本:2.1.5(2014-11-13 补丁级别 273)[x86_64-darwin14.0]
安装目录:/Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0
RUBY 可执行文件:/Users/speersj/.rbenv/versions/2.1.5/bin/ruby
可执行目录:/Users/speersj/.rbenv/versions/2.1.5/bin
规范缓存目录:/Users/speersj/.gem/specs
系统配置目录:/Users/speersj/.rbenv/versions/2.1.5/etc
RUBYGEMS 平台:
红宝石
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 => 真
:详细 => 真
:回溯 => 假
:bulk_threshold => 1000
远程资源:
外壳路径:
/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
宝石规格:
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
在使用 rbenv(或 RVM)时不能使用 sudo
来安装 gem,除了专门的 "multi-user" 或 "system-wide" 类型安装normal/regular 用户应该使用的很少。
sudo
将您的权限提升到 root,而 root 不知道用户 rbenv 环境中的 Rubies。结果,root 将使用默认系统 Ruby,它将在那里安装文件。
相反,使用基本的 gem install
,这会做正确的事。
您的 gemspec
的 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 guide suggests you do something like this(文本来自该部分的末尾):
If you’ve added more files to your gem, make sure to remember to add them to your gemspec’s files array before publishing a new gem! For this reason (among others), many developers automate this with Hoe, Jeweler, Rake, Bundler, or just a dynamic gemspec.
此外,您确实需要修复 ,您不需要 sudo
将 gem 安装到您自己的主目录中。
确保在构建 gem 之前将所有修改过的文件添加到 github 存储库中,然后安装构建 gem.
我正在尝试使用 http://guides.rubygems.org/make-your-own-gem/ 中的说明构建 Ruby gem。以下似乎工作正常并生成一个 *.gem 文件。
gem build mygem.gemspec
以下似乎也是成功的(仅当以 sudo
开头时):
sudo gem install mygem-0.0.1.gem
但是,当我尝试 require 'mygem'
inside irb 时,出现以下错误:
LoadError: cannot load such file -- mygem
我在 Whosebug 上看到过类似的错误,但无法弄清楚我的具体情况出了什么问题。我可以毫无问题地要求其他 gems(不是我的)。我的 gem 确实出现在 gem list
的输出中,但它不会加载 require.
FWIW 我正在使用 rbenv,这对我来说是全新的。
这是gem env
的输出:
RUBYGEMS 版本:2.4.5
RUBY 版本:2.1.5(2014-11-13 补丁级别 273)[x86_64-darwin14.0]
安装目录:/Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0
RUBY 可执行文件:/Users/speersj/.rbenv/versions/2.1.5/bin/ruby
可执行目录:/Users/speersj/.rbenv/versions/2.1.5/bin
规范缓存目录:/Users/speersj/.gem/specs
系统配置目录:/Users/speersj/.rbenv/versions/2.1.5/etc
RUBYGEMS 平台:
红宝石
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 => 真
:详细 => 真
:回溯 => 假
:bulk_threshold => 1000
远程资源:
外壳路径:
/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
宝石规格:
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
在使用 rbenv(或 RVM)时不能使用 sudo
来安装 gem,除了专门的 "multi-user" 或 "system-wide" 类型安装normal/regular 用户应该使用的很少。
sudo
将您的权限提升到 root,而 root 不知道用户 rbenv 环境中的 Rubies。结果,root 将使用默认系统 Ruby,它将在那里安装文件。
相反,使用基本的 gem install
,这会做正确的事。
您的 gemspec
的 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 guide suggests you do something like this(文本来自该部分的末尾):
If you’ve added more files to your gem, make sure to remember to add them to your gemspec’s files array before publishing a new gem! For this reason (among others), many developers automate this with Hoe, Jeweler, Rake, Bundler, or just a dynamic gemspec.
此外,您确实需要修复 sudo
将 gem 安装到您自己的主目录中。
确保在构建 gem 之前将所有修改过的文件添加到 github 存储库中,然后安装构建 gem.