2013-04-28 5 views
5

Ich habe vor kurzem beschlossen, einige Funktionen, die ich in mehreren meiner Rails-Anwendungen habe, zu extrahieren und in eine Engine zu extrahieren. Ich habe jetzt die Engine beendet und versuche das fertige Juwel in eine meiner Apps zu installieren.Custom Gem in/Hersteller/Edelsteine ​​nicht Laden

Dieses besondere Juwel ist nicht etwas, das ich öffentlich sein möchte, also packte ich das Juwel mit gem build my_gem.gemspec und dann legte das verpackte Juwel in den Vendor/Gems-Ordner meiner Anwendung. Dann fügte ich gem 'my_gem', '0.0.1', :path => 'vendor/gems' zu meinem gemfile hinzu und lief bundle install.

Leider aber Rails scheinen nicht zu dem Edelstein zu laden, und ich kann nicht scheinen, manuell zu verlangen:

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

Bin ich etwas falsch? Wie behebe ich das?


Edit: Hier ist mein Juwel Umgebungsinformationen.

$ 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/ 

Antwort

4

Geben Sie gem env ein, um zu überprüfen, wo Ruby nach Edelsteinen sucht.

Sie möchten dann das Verzeichnis, in dem Sie Ihr Juwel abgelegt haben, an die Umgebungsvariable GEM_PATH anhängen. zB:

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

Siehe auch: http://docs.rubygems.org/read/chapter/12

Wenn Sie eine Gemfile verwenden, können Sie dies auch:

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

(Sie haben den Namen Ihres gem Verzeichnis der hinzufügen Pfad)

+0

"Edelsteinverzeichnis" bedeutet, dass ich einen unverpackten Edelstein benutze, oder? Soll ich das so machen? Da die Dinge derzeit so sind (ich benutze einen verpackten Edelstein), gibt ': path => 'vendor/gems/mein_gem' den Fehler 'Der Pfad' C:/Users/Ajedi32/my_app/vendor/edelsteine ​​/ mein_gem 'existiert nicht.' – Ajedi32

+0

benötigen Sie eine 'my-gem.gemspec' Datei in diesem Verzeichnis. Du kannst das Verzeichnis auch irgendwo unter Git Versionskontrolle platzieren und dann den Pfad zu der URL zeigen, die das Verzeichnis – Tilo

+0

auschecken kann. Okay, ich kann also keine gebündelte Version des Edelsteins verwenden? I.E. 'my_gem.gem'? Oder ist das die Variable 'GEM_PATH'? – Ajedi32