簡體   English   中英

創建紅寶石寶石時出現LoadError

[英]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.rblib文件夾的終端中,它給了我這個:

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:in require' 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: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 riverbattle.rb:1:in'

1. #require嘗試加載絕對路徑,如果失敗,則從$:加載,以添加當前目錄,以如下方式運行腳本(bash,否則請使用適當的方法為您的shell定義環境變量):

RUBYLIB="." ruby riverbattle.rb

在您的base.rb要求如下:

require 'riverbattle/game'

2. 參見#UPD部分

3.你為什么不呢? (您對此有何具體問題 ?)

#UPD

第二個問題是因為你錯過#files在你的寶石規范,沒有文件都包含在你的寶石文件中添加這樣的事情:

s.files = Dir['lib/*.rb'] + Dir['lib/riverbattle/*.rb']

#UPD2

總結一下, 這里是您的gem的工作設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM