2015-04-13 12 views
12

Ho appena effettuato un nuovo checkout del mio progetto Rails Engine e quando (dopo bundle install) invoco rails -v nella sua directory principale, ricevo un LoadError in cui Rails sembra essere alla ricerca per i più gemma/motore che sto cercando di costruire:Impossibile eseguire Rails nel progetto Gem/Engine senza prima installare la gemma stessa

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>' 

Esecuzione gem env come suggerito fornisce più l'illuminazione:

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 

posso costruire/installare il gemma bene con

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

dopo di che rails -v inizia a lavorare. * Non sembra come questo dovrebbe essere necessario, però, e mi fa paura che Rails può essere costruita utilizzando la versione/installata del codice al posto del sorgente live . Che cosa sto facendo di sbagliato?


* Cioè, si corre, anche se si lamenta "Bundler sta usando una binstub che è stato creato per una gemma diversa". Forse perché non gradisce il fatto che la gemma si chiama my-engine ma lo ENGINE_PATH ha my/engine?

risposta

0

Sembra che in qualche modo l'installazione della gemma locale su questa macchina sia stata danneggiata, anche se ho creato un nuovo motore non correlato, si è lamentato di non riuscire a trovare my-engine. rm -r ~/.rvm/gems/ruby-2.2.1*/gem install rails risolto il problema (anche se al prezzo di dover reinstallare un gruppo di gemme).

0

Non ha senso chiamare rails -v all'interno della root del motore poiché un motore è un gioiello dopo tutto quello che deve essere caricato in un'applicazione rails, a meno che non lo si abbia strutturato come una normale app per rotaie invece di una gemma del motore .

Fondamentalmente, quando si esegue rails -v, tenterà di caricare il motore come gemma non come una normale applicazione di rotaie, pertanto si lamenterà se non è installata nel proprio ambiente.

+0

Questo in realtà non è vero. Se esegui rails -v dopo aver seguito l'esempio di [Getting started with engines] (http://guides.rubyonrails.org/engines.html), 'rails plugin new blorgh --mountable; cd blorg; rails -v', funziona bene (almeno con Ruby 2.2.1). –