2009-08-11 7 views
14

Próbuję dostać jakieś perełki pracuje na web-host, który obsługuje kilka klejnotów Ruby i Ruby, ale nie tylko niektóre z nich muszę używać.Ruby klejnot na liście, ale przyzwyczajenie obciążenia (gem w katalogu użytkownika, nie rubin dir)

Postępując zgodnie z instrukcjami znalazłem here, ja zachowałem oryginalną lokalizację klejnot w mojej ścieżce gem i dodał własne w/path/to/my/home/kamienie do ~/.gemrc

gemhome: /users/home/myuser/gems 
gempath: 
- /usr/local/lib/ruby/gems/1.8 
- /users/home/mysuser/gems 

I pobierał kilka klejnotów ręcznie i instalował przy użyciu opcji --local i --install-dir polecenia gem. Następnie zrobiłem "listę klejnotów" i faktycznie widzę klejnoty zainstalowane w moim katalogu użytkownika, a także oryginalne klejnoty w normalnej ścieżce systemowej.

Gdybym kopać na IRB lub zrobić -e rubinowy, wszystkie kamienie systemowe działają dobrze. Jednak nie mogę się moim katalogu użytkownika zainstalowane perełki załadowany:

$ ruby -r rubygems -e "require 'nokogiri'" 
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- nokogiri (LoadError) 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require' 
    from -e:1 

Próbowałem nawet starej szkoły require_gem:

$ irb -r rubygems 
irb(main):001:0> require_gem 'nokogiri' 
Gem::LoadError: Could not find RubyGem nokogiri (> 0.0.0) 

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem' 
    from (irb):1 

Z mojej „listy klejnotów” widzę:

nokogiri (1.3.3) 
Nokogiri is an HTML, XML, SAX, and Reader parser 

Mam ten sam problem z wszystkimi klejami instalacyjnymi katalogu użytkownika. Czego tu mi brakuje?

EDYCJA: Jest to nie aplikacja szyny. Dotyczy to aplikacji linii poleceń. Program będzie realizowany przez mojego konta użytkownika, tak jak pokazano powyżej testy w

EDIT:. Za sugestią Rafe jest, spojrzałem na Gem.path z IRB. IT tylko listy ścieżka System gem, /usr/local/lib/ruby/gems/1.8, a nie moja droga użytkownik reż jak dobrze.

+0

Co jest wyświetlane, gdy po prostu wpisujesz wyrażenie "Gem.path" w irb? – Rafe

+1

Ahh, ciekawe ... patrz powyżej powyżej: – Matt

Odpowiedz

38

miałem ten sam problem, naprawiłem go poprzez dodanie następujących u góry rubin złożyć

require 'rubygems' 

nadzieję, że pomoże

+0

Spędziłem godzinę zastanawiając się, który jest "plik ruby", aby dodać to do, ponieważ miałem klejnot z "-rails". Wreszcie dodałem go do pliku rails/rails.rb i magicznie, zadziałało –

0

Wyobrażam sobie, że problemem jest to, że aplikacja internetowa nie używa tej samej konfiguracji, czy konto użytkownika jest, prawdopodobnie dlatego, że to działa jako inny użytkownik. Jedną z opcji jest załadowanie klejnotów do aplikacji vendor/gems.

Można to zrobić za pomocą komputera lokalnego rake gems:unpack, sprawdź te perełki język kontroli wersji, a następnie wdrożyć je na serwerze. To dla mnie najbardziej niezawodne podejście. Alternatywnie możesz zmienić konfigurację swojej aplikacji, aby szukać klejnotów w swoim katalogu domowym.

+0

to w rzeczywistości nie jest wcale aplikacja internetowa - brak szyn itp. Potrzebuję bibliotek klejnotów dla aplikacji z wiersza poleceń. – Matt

+0

Aplikacja poleceń, która ma zostać wykonana również w moim normalnym środowisku użytkownika - tak więc powyższe przykłady pokazujące błąd z wykonania wiersza polecenia są dokładnie tym problemem. – Matt

+0

Zastanawiam się, czy była to aplikacja Rails. – Rafe

5

Mój obecny pracy (ale mniej niż ideał) rozwiązaniem jest zrobić

Gem.path.push "/path/to/my/gems" 

mówię mniej niż idealny, ponieważ jest to, czego się spodziewałem zawartości .gemrc dla mnie zrobić automatycznie, dla wszystkich wykonanie ruby ​​w moim środowisku użytkowników. Nie wiem, dlaczego tak się nie dzieje - ale powyższe przynajmniej działa.

0

I zostały zmagają się z tego i ustalili, że. gemrc nie wydaje się być załadowany we wszystkich przypadkach. Na przykład jest to honorowane podczas instalowania klejnotów, ale niekoniecznie przy uruchomieniu irb lub skryptu/konsoli.

Odkryłem również, że ta ścieżka do katalogu lokalnego musi być inna niż ta, którą widziałem na wielu stronach. Następujące roboty dla mnie:

--- 
gem: --no-ri --no-rdoc 
gemhome: /home/.gem/ruby/1.8 
gempath: 
- /home/.gem/ruby/1.8 
- /usr/lib/ruby/gems/1.8 
0

miałem podobny problem, ale przyjęte rozwiązanie nie jest tu najwyraźniej do zrobienia (przynajmniej nie było to dla mnie). Jeśli to możliwe, nie powinno się tego robić w plikach gem:

require 'rubygems' 

Dlaczego nie zapytasz? Spójrz na ten artykuł: http://tomayko.com/writings/require-rubygems-antipattern

W każdym razie powinno być w porządku po prostu wymagająca „RubyGems” Kiedy dzwoni IRB:

> irb -r 'rubygems' 

i powinieneś mieć ten sam rezultat. Nie wiem, dlaczego na to pytanie ta metoda nie działa.

Powiązane problemy