2009-05-26 17 views
7

Potrzebuję uruchomić kilka skryptów ruby, które napisałem na serwerze, do których nie mam dostępu.
Na mojej własnej maszynie, zainstalowałem kilka klejnotów używając "sudo gem install .." i użyłem ich w moim kodzie ..
Czy jest jakiś mechanizm, który pozwoliłby mi użyć tych klejnotów bez formalnego instalowania ich na pilocie maszyna?Używanie klejnotu bez jego instalowania

Odpowiedz

6

Możesz, ale to trudne.

Najpierw należy zainstalować je za pomocą opcji --install-dir, tj:

gem install gem_name --install-dir /some/directory/you/can/write/to 

Po drugie, upewnij się, że masz plik .gemrc w swoim katalogu domowym, który wygląda mniej więcej tak:

gemhome: /some/directory/you/can/write/to 
gempath: 
- /some/directory/you/can/write/to 
- /usr/local/lib/ruby/gems/1.8 

gemhome jest gdzie klejnoty powinny wyglądać pierwszy, gdy szukają klejnotu. gempath to wszystkie ścieżki, które należy sprawdzić podczas wyszukiwania klejnotu. Tak więc w powyższym kodzie .gemrc powiem, że mój kod powinien wyglądać najpierw w katalogu lokalnym, a jeśli nie zostanie znaleziony, sprawdź katalog gem systemu.

Po trzecie, należy pamiętać, że niektóre kody - nawet kod w klejnotach - mogą zawierać założenia dotyczące lokalizacji klejnotów. Niektóre kody mogą programowo zmieniać gempath lub gemhome. Być może będziesz musiał "zmienić to z powrotem" we własnym kodzie.

Nie ma zbyt wiele (czytaj: nie) dokumentacji, jak to zrobić - najlepszym sposobem, aby to zrozumieć, jest zapoznanie się z testami dołączonymi do źródła RubyGems. Oto jak ja siekać drogi klejnot w zadaniu natarcia zwrócić do mojego mrożonej wersji Kapistrana:

Gem.use_paths(Gem.dir, ["#{RAILS_ROOT}/vendor/gems"]) 
    Gem.refresh # picks up path changes 
+0

I rzeczywiście zrobić to cały czas (wszystkie moje perełki zainstalować w ~ /.gem) i jeszcze nie napotkali żadnego nieprawidłowo działającego kodu, ani nie są dla niego tak trudni. Ale YMMV. – rampion

+0

Interesujące, zastanawiam się, czy ~/.gem jest szczególnym przypadkiem. Zwykle próbuję odwoływać się do klejnotów zainstalowanych w aplikacji. –

Powiązane problemy