2008-12-02 11 views
16

Domyślnie po zainstalowaniu plików wykonywalnych /usr/bin/Czy "gem install" może być skonfigurowany tak, aby domyślnie instalował pliki wykonywalne poza katalogiem/usr/bin /?

Czy można to zmienić? Na przykład, aby zainstalować je w /usr/local/rubygems/bin (lub dowolnej innej ścieżce)?

Ścieżka nie wydaje się być zakodowane w pliku gemspec, więc nie rozumiem, dlaczego to nie powinno być możliwe (chociaż mam bardzo małe doświadczenie z Ruby/Kamienie szlachetne)

Odpowiedz

14

See http://www.rubygems.org/read/chapter/11 i określ ~/.gemrc, który definiuje zmienną gemhome.

Na przykład:

gemhome: /usr/local/rubygems 

Można również umieścić ten plik w /etc/gemrc

Alternatywnie można ustawić GEM_HOME env-variable:

$ export GEM_HOME=/tmp/gemtest 
$ gem install bundler 
$ ls /tmp/gemtest/bin/ 
bundle 
+2

Dzięki! Mam nadzieję, że nie masz nic przeciwko, że zaktualizowałem twoją odpowiedź. Naciskam na rubygems.rb - bin bin jest dołączony do gemhome'a, nie wydaje się oczywistym sposobem, aby to zmienić tylko to, ale ustawienie gemhome na /Library/Ruby/Gems/1.8/ (na OS X) daje ścieżkę bin of /Library/Ruby/Gems/1.8/bin który jest idealny – dbr

+0

Dobra aktualizacja, dzięki! – csl

+1

Gah, niezupełnie doskonały. Istnieje domyślne nadpisanie/usr/bin dla dystrybucji Mac. – dbr

2

Na OS X, katalog wykonywalny jest przesłonięta do /usr/bin w pliku /Library/Ruby/Site/1.8/rubygems/defaults.rb

# The default directory for binaries 
def self.default_bindir 
    if defined? RUBY_FRAMEWORK_VERSION then # mac framework support 
    '/usr/bin' 
    else # generic install 
    ConfigMap[:bindir] 
    end 
end 

W ramach prac hakerskich zmieniłam /usr/bin na żądaną lokalizację bin, która działa poprawnie. Nie ma chyba sposobu na zastąpienie bindira z konfiguracji ~/.gemrc?

+1

To jest naprawdę denerwujące. Nie można tego zmienić, ponieważ zależy ona od stałej globalnej. A jeśli zmienisz go za każdym razem, gdy rubigemy zostaną zaktualizowane, musisz je jeszcze raz zmienić. Chciałbym zastrzelić faceta odpowiedzialnego za tę przerażającą decyzję. – mxcl

+1

Złożyłem raport o błędzie: http://rubyforge.org/tracker/index.php?func=detail&aid=27641&group_id=126&atid=575 – mxcl

+1

Właściwie to myliłem się. Możesz zmienić bindir. Udokumentowałem to tutaj: http: //wiki.gitub.com/mxcl/homebrew/cpan-ruby-gems-and-python-disttools – mxcl

18

Dodaję to jako odpowiedź tak, że jest oczywiste, kiedy napotkasz ten problem jeszcze raz :)

Najpierw przenieść wszystkie kosze w /var/lib/gems/1.8/bin/ do /usr/bin/. Jeśli tego nie zrobisz, odinstalowanie lub aktualizacja klejnotu nie spowoduje usunięcia pliku binarnego z oryginalnego katalogu bin.

Można również usunąć starą drogę z $PATH

Następny, edytować ~/.gemrc i dodać (lub aktualizacji) następujący wiersz:

gem: --bindir /usr/bin 

zastępuje to klejnot tak, że zawsze używa/usr/bin/jako bin re.

Nie trzeba aktualizować ścieżki (szczególnie niechlujny w przypadku komputerów wielu użytkowników).

+0

Tak, to działa idealnie (przynajmniej na Rubygem 1.3.6) – dbr

+0

Jak to zrobić: * Możesz również chcieć usunąć stara ścieżka od $ PATH * –

+0

@JohnRPerry Istnieje kilka dobrych technik dla [usuwania katalogów z $ PATH] (https://stackoverflow.com/q/11650840/41688) – BryanH

Powiązane problemy