Не удается запустить Rails в проекте Gem/Engine без предварительной установки самого драгоценного камня

Я только что сделал новую проверку моего проекта Rails Engine, и когда (после bundle install) я вызываю rails -v в свой корневой каталог, я получаю LoadError, в котором Rails, похоже, ищет очень жемчужина/двигатель, который я пытаюсь построить:

my-engine dmoles$ rails -v
/Users/dmoles/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/dependency.rb:315:in `to_specs': Could not find 'my-engine' (>= 0) among 117 total gem(s) (Gem::LoadError)
Checked in 'GEM_PATH=/Users/dmoles/.rvm/gems/ruby-2.2.1:/Users/dmoles/.rvm/gems/[email protected]', execute `gem env` for more information
    from /Users/dmoles/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/dependency.rb:324:in `to_spec'
    from /Users/dmoles/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_gem.rb:64:in `gem'
    from /Users/dmoles/.rvm/gems/ruby-2.2.1/bin/rails:22:in `<main>'

Выполнение gem env, как было предложено, не дает больше просветления:

my-engine dmoles$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.6
  - RUBY VERSION: 2.2.1 (2015-02-26 patchlevel 85) [x86_64-darwin14]
  - INSTALLATION DIRECTORY: /Users/dmoles/.rvm/gems/ruby-2.2.1
  - RUBY EXECUTABLE: /Users/dmoles/.rvm/rubies/ruby-2.2.1/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/dmoles/.rvm/gems/ruby-2.2.1/bin
  - SPEC CACHE DIRECTORY: /Users/dmoles/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/dmoles/.rvm/rubies/ruby-2.2.1/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-14
  - GEM PATHS:
     - /Users/dmoles/.rvm/gems/ruby-2.2.1
     - /Users/dmoles/.rvm/gems/[email protected]
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /Users/dmoles/.rvm/gems/ruby-2.2.1/bin
     - /Users/dmoles/.rvm/gems/[email protected]/bin
     - /Users/dmoles/.rvm/rubies/ruby-2.2.1/bin
     - /Users/dmoles/.rvm/bin
     - /Users/dmoles/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /usr/local/git/bin

Я могу создать/установить жемчужину с помощью

gem build my-engine.gemspec
gem install my-engine-0.0.1.gem

после которого rails -v начинает работать. * Похоже, что это не должно быть необходимо, и это заставляет меня беспокоиться о том, что Rails может использовать встроенную/установленную версию кода вместо исходного. Что я делаю неправильно?


* То есть, он работает, хотя он жалуется, что "Bundler использует binstub, который был создан для другого драгоценного камня". Возможно, потому что ему не нравится тот факт, что камень называется my-engine, но ENGINE_PATH имеет my/engine?

Ответ 1

Похоже, что локальная настройка gem на этой машине была повреждена - даже если я создал совершенно новый неродственный движок, он все еще жаловался на то, что не смог найти my-engine. rm -r ~/.rvm/gems/ruby-2.2.1*/gem install rails исправил проблему (хотя и ценой переустановки кучу драгоценных камней).

Ответ 2

Не имеет смысла вызывать rails -v внутри корня ядра, так как движок является камнем после того, как все это необходимо загрузить в приложение rails, если только вы не структурированы как обычное приложение rails вместо механизма драгоценный камень.

В основном, когда вы запускаете rails -v, он попытается загрузить ваш движок в качестве драгоценного камня, а не как обычное приложение для рельсов, поэтому он будет жаловаться, если он не установлен в вашей среде.