2013-04-28 8 views
5

Recentemente ho deciso di adottare alcune funzionalità che ho in molte delle mie app Rails e di estrarle in un motore. Ora ho finito il motore e sto cercando di installare la gemma finita in una delle mie app.Gemma personalizzata in/vendor/gems non in caricamento

Questa particolare gemma non è qualcosa che voglio essere pubblica, quindi ho impacchettato la gemma con gem build my_gem.gemspec e poi ho inserito la gemma pacchettizzata nella cartella vendor/gems della mia applicazione. Quindi, ho aggiunto gem 'my_gem', '0.0.1', :path => 'vendor/gems' al mio gemfile e ho eseguito bundle install.

Purtroppo, però, Rails non sembra essere il caricamento del gioiello e io non riesco a richiedere manualmente:

$ bundle exec rails console --sandbox 
Loading development environment in sandbox (Rails 3.2.11) 
Any modifications you make will be rolled back on exit 
irb(main):001:0> MyGem 
NameError: uninitialized constant MyGem 
     from (irb):1 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start' 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start' 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 
irb(main):002:0> require 'my_gem' 
LoadError: cannot load such file -- my_gem 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require' 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require' 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:236:in `load_dependency' 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require' 
     from (irb):2 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start' 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start' 
     from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

Sto facendo qualcosa di sbagliato? Come posso risolvere questo?


Edit: Ecco la mia informazioni sull'ambiente gioiello.

$ gem env 
RubyGems Environment: 
    - RUBYGEMS VERSION: 1.8.16 
    - RUBY VERSION: 1.9.3 (2012-02-16 patchlevel 125) [i386-mingw32] 
    - INSTALLATION DIRECTORY: c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1 
    - RUBY EXECUTABLE: c:/RailsInstaller/Ruby1.9.3/bin/ruby.exe 
    - EXECUTABLE DIRECTORY: c:/RailsInstaller/Ruby1.9.3/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86-mingw32 
    - GEM PATHS: 
    - c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1 
    - c:/Users/Ajedi32/.gem/ruby/1.9.1 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - REMOTE SOURCES: 
    - http://rubygems.org/ 

risposta

4

Digitare gem env per verificare dove Ruby sta cercando le gemme.

Quindi si desidera aggiungere la directory in cui si inserisce la gemma alla variabile di ambiente GEM_PATH. ad esempio:

export GEM_PATH="./vendor/gems:$GEM_PATH" 

Vedi anche: http://docs.rubygems.org/read/chapter/12

Se si utilizza un Gemfile, si può anche fare questo:

gem 'my-gem', '0.0.1', :path => 'vendor/gems/my-gem' 

(si deve aggiungere il nome della directory gemma al path)

+0

"gem directory" implica che sto usando una gemma non pacchettizzata, giusto? È così che dovrei farlo? Perché il modo in cui le cose sono attualmente (sto usando una gemma pacchettizzata), ': path => 'vendor/gems/my_gem'' dà l'errore' Il percorso' C:/Users/Ajedi32/my_app/vendor/gems/my_gem 'inesistente. – Ajedi32

+0

è necessario un file 'my-gem.gemspec' in quella directory. Si potrebbe anche mettere quella directory da qualche parte sotto il controllo di versione Git, e quindi puntare il percorso verso l'URL che può controllare la directory – Tilo

+0

Ah ok, quindi non posso usare una versione in bundle della gemma? OSSIA 'My_gem.gem'? O è questo ciò che la variabile 'GEM_PATH' è? – Ajedi32

Problemi correlati