Проблема с ключевым словом require, не находящим файл для загрузки - PullRequest
0 голосов
/ 23 декабря 2010

У меня проблема с ключевым словом require в ruby, я только что загрузил гем, используя:

gem install thegem

И когда я попытался запустить пример, я получил следующую ошибку:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- 
    ./thegem/some/path (LoadError)

В коде, где проблема:

needs_to_load = a_class
require "gem/some/path/#{needs_to_load}"

Я Рубин нуб, изучая свой путь, и не уверен, что это такое, поиск в Google не помог, но обнаружил, что это может быть связано с необходимостью относительного пути, однако изменение 2-й строки на следующее не поможет:

require "./gem/some/path/#{needs_to_load}"

Я использую RVM со следующей версией ruby: ruby-1.9.2-head.

(p.s. Извините, если это было задано, прежде чем я ничего не увидел в поле связанных вопросов)

[Редактировать: добавление вывода 'rvm info' и 'gem env' в соответствии с запросом Железного Человека ниже]

$ gem env

RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [i386-darwin9.8.0]
  - INSTALLATION DIRECTORY: /Users/username/.rvm/gems/ruby-1.9.2-head
  - RUBY EXECUTABLE: /Users/username/.rvm/rubies/ruby-1.9.2-head/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/username/.rvm/gems/ruby-1.9.2-head/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-9
  - GEM PATHS:
     - /Users/username/.rvm/gems/ruby-1.9.2-head
     - /Users/username/.rvm/gems/ruby-1.9.2-head@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

$ rvm info

ruby-1.9.2-head:

  system:
    uname:       "Darwin macintosh 10.5.0 Darwin Kernel Version 10.5.0: Fri Nov  5 23:20:39 PDT 2010; root:xnu-1504.9.17~1/RELEASE_I386 i386"
    zsh:         "zsh 4.3.9 (i386-apple-darwin10.0)"
    bash:        "GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)"

  rvm:
    version:      "rvm 1.0.1 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/]"

  ruby:
    interpreter:  "ruby"
    version:      "1.9.2p0"
    date:         "2010-08-18"
    platform:     "i386-darwin9.8.0"
    patchlevel:   "2010-08-18 revision 29034"
    full_version: "ruby 1.9.2p0 (2010-08-18 revision 29034) [i386-darwin9.8.0]"

  homes:
    gem:          "/Users/username/.rvm/gems/ruby-1.9.2-head"
    ruby:         "/Users/username/.rvm/rubies/ruby-1.9.2-head"

  binaries:
    ruby:         "/Users/username/.rvm/rubies/ruby-1.9.2-head/bin/ruby"
    irb:          "/Users/username/.rvm/rubies/ruby-1.9.2-head/bin/irb"
    gem:          "/Users/username/.rvm/rubies/ruby-1.9.2-head/bin/gem"
    rake:         "/Users/username/.rvm/gems/ruby-1.9.2-head/bin/rake"

  environment:
    PATH:         "/Users/username/.rvm/gems/ruby-1.9.2-head/bin:/Users/username/.rvm/gems/ruby-1.9.2-head@global/bin:/Users/username/.rvm/rubies/ruby-1.9.2-head/bin:/Users/username/.rvm/bin:/Library/Frameworks/Python.framework/Versions/2.6/bin:/sw/bin:/sw/sbin:/opt/local/bin:/opt/local/sbin:/opt/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/mysql/bin:/usr/X11R6/bin"
    GEM_HOME:     "/Users/username/.rvm/gems/ruby-1.9.2-head"
    GEM_PATH:     "/Users/username/.rvm/gems/ruby-1.9.2-head:/Users/username/.rvm/gems/ruby-1.9.2-head@global"
    BUNDLE_PATH:  "/Users/username/.rvm/gems/ruby-1.9.2-head"
    MY_RUBY_HOME: "/Users/username/.rvm/rubies/ruby-1.9.2-head"
    IRBRC:        "/Users/username/.rvm/rubies/ruby-1.9.2-head/.irbrc"
    RUBYOPT:      ""
    gemset:       ""

1 Ответ

3 голосов
/ 23 декабря 2010

Если вы используете обычный gem install somegem, тогда вы сможете require 'somegem', без указания пути к имени драгоценного камня. require_relative полезен для гемов и модулей, которые установлены где-то вне обычных путей поиска в Ruby, например, те, которые вы написали и встраивали в каталог lib непосредственно под каталогом вызывающего скрипта.

Используйте gem env и добавьте его вывод к исходному вопросу, отредактировав его, что поможет нам определить, является ли это проблемой с указанием пути. Поскольку вы используете RVM, ваш путь к гему должен указывать на вашу папку ~/.rvm. Если вы сделаете rvm info, это также даст вам информацию о пути, поэтому сравните выходные данные этих двух команд, чтобы увидеть, согласуются ли они.

...