[英]LoadError when creating ruby gem
我正在嘗試創建我的第一個寶石,這是它的結構:
riverbattle
├── lib
│ ├── riverbattle
│ │ ├── base.rb
│ │ ├── colorful.rb
│ │ ├── computer.rb
│ │ ├── constants.rb
│ │ ├── exit_error.rb
│ │ ├── field.rb
│ │ ├── game.rb
│ │ ├── human.rb
│ │ ├── invalid_move_error.rb
│ │ ├── move.rb
│ │ ├── player.rb
│ │ ├── version.rb
│ │ └── victory_error.rb
│ └── riverbattle.rb
└── riverbattle.gemspec
當我在rivarbattle/lib/riverbattle
目錄中並運行命令ruby base.rb
,一切都會按應有的方式開始工作。
文件base.rb
在這里:
require './game'
game = Game.new.start
但是當我嘗試使用ruby riverbattle.rb
命令從lib
目錄運行它時,它失敗並顯示以下錯誤:
/home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
require': cannot load such file -- riverbattle/base (LoadError) from /home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
riverbattle.rb:1:in ''
文件lib/riverbattle.rb
如下所示:
require 'riverbattle/base'
盡管加載失敗,但我還是嘗試使用以下.gemspec文件構建gem:
# -*- encoding: utf-8 -*-
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require "riverbattle/version"
Gem::Specification.new do |s|
s.name = 'riverbattle'
s.date = '2015-07-04'
s.summary = 'Enjoy the game!'
s.description = 'A small simple game called the Riverbattle'
s.platform = Gem::Platform::RUBY
s.version = '0.1.0'
s.authors = ["Denis Yakovenko"]
s.email = ["yakovenko.denis.a@gmail.com"]
s.require_paths = ["lib"]
s.license = "MIT"
end
成功構建之后,我去irb並嘗試require 'riverbattle'
並得到錯誤:
LoadError:無法加載此類文件-Riverbattle
來自/home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
require' from /home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
(irb):1 from /home/denis/.rvm/rubies/ruby-2.2 .1 / bin / irb:11:in''
1)我在做什么錯, require
無法加載來自不同目錄的文件? (查看了stackoverflow問題后,我發現這是$ LOAD_PATH的問題,但是我找不到如何解決代碼的問題。順便說一句,由於某些原因,此類require
LoadError經常發生,然后我嘗試使用require_relative
和有時會有所幫助)
2)當我嘗試對irb中的寶石進行清洗時,由於require
最初問題而引發了錯誤,對嗎? 還是其他地方有問題?
3)如果我想將測試文件夾添加到gem,是否可以將文件夾tests
添加到根目錄並在其中復制所有rspec文件?
當我嘗試運行RUBYLIB="." ruby riverbattle.rb
RUBYLIB="." ruby riverbattle.rb
在lib
文件夾的終端中,它給了我這個:
RUBYLIB =“。 ruby riverbattle.rb /home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
require': cannot load such file -- ./field (LoadError) from /home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
require'來自/ home / denis / WEB / Bursa / riverbattle / lib / riverbattle / game.rb:1:在/home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2的<top (required)>' from /home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
require'來自/home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb :54:inrequire' from /home/denis/WEB/Bursa/riverbattle/lib/riverbattle/base.rb:1:in
'來自/home/denis/WEB/Bursa/riverbattle/lib/riverbattle/base.rb:1:in'來自/home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby /site/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:inrequire' from /home/denis/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
riverbattle.rb:1:in'
1. #require
嘗試加載絕對路徑,如果失敗,則從$:
加載,以添加當前目錄,以如下方式運行腳本(bash,否則請使用適當的方法為您的shell定義環境變量):
RUBYLIB="." ruby riverbattle.rb
在您的base.rb
要求如下:
require 'riverbattle/game'
2. 參見#UPD部分
3.你為什么不呢? (您對此有何具體問題 ?)
第二個問題是因為你錯過#files
在你的寶石規范,沒有文件都包含在你的寶石文件中添加這樣的事情:
s.files = Dir['lib/*.rb'] + Dir['lib/riverbattle/*.rb']
總結一下, 這里是您的gem的工作設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.