Jak używać gemów z Ubuntu?
Niedawno uaktualniłem do Ubuntu 9.04 i mam problemy z używaniem gemów.
Zainstalowałem Ruby, Rubygems i Rails używając apt-get.
Polecenie rails
działa.
sudo gem install XXX
Gdy chcę użyć komendy cap
nie działa:
bash: cap: command not found
Tak samo jest z innymi poleceniami gem.
Czy mam coś konkretnego do zrobienia, aby polecenia gem działały?
5 answers
Gdzie są moje klejnoty?
Możesz znaleźć miejsce przechowywania swoich klejnotów za pomocą polecenia gem environment
. Na przykład:
chris@chris-laptop:~$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.2
- RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
- INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /usr/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /usr/lib/ruby/gems/1.8
- /home/chris/.gem/ruby/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
Jeśli spojrzysz na sekcję " ścieżki klejnotów:", zobaczysz, że klejnoty mogą być przechowywane w dwóch miejscach na moim laptopie: /usr/lib/ruby/gems/1.8
lub w katalogu .gem
w moim katalogu domowym.
Możesz również zobaczyć, że pliki wykonywalne są przechowywane w katalogu wykonywalnym, który w tym przypadku jest /usr/bin
.
Ponieważ /usr/bin
jest na mojej drodze to pozwala mi biec cap
, merb
, rails
itd.
Aktualizacja ścieżki
Jeśli z jakiegoś powodu twój katalog wykonywalny nie znajduje się na twojej ścieżce (na przykład jeśli jest to /var/lib/gems/1.8/bin), musisz zaktualizować swoją zmienną PATH.
Zakładając, że używasz powłoki bash. Możesz to zrobić szybko dla bieżącej sesji, wpisując następujące polecenie w wierszu polecenia powłoki; Załóżmy, że chcesz dodać /var/lib/gems/1.8/bin
do ścieżki:
export PATH=$PATH:/var/lib/gems/1.8/bin
I naciśnij return. Który dołącza nowy katalog do końca bieżąca ścieżka. Zwróć uwagę na dwukropek pomiędzy $PATH
a /var/lib/gems/1.8/bin
Aby ustawić wartość dla wszystkich sesji, musisz edytować plik .profile
lub .bashrc
i dodać tę samą linię na końcu pliku. Zwykle edytuję mój plik .bashrc
nie z innego powodu niż to, co zawsze robiłem. Po zakończeniu zapisz plik, a następnie odśwież środowisko, wpisując:
bash
W wierszu polecenia powłoki. To spowoduje, że .bashrc
zostanie ponownie przeczytany.
W dowolnym momencie możesz sprawdzić aktualny wartość $PATH
przez wpisanie
echo $PATH
W wierszu polecenia powłoki.
Oto przykład z jednego z moich własnych serwerów, gdzie moja nazwa użytkownika to "chris", a nazwa maszyny to "chris-laptop": {]}chris@chris-laptop:~$
chris@chris-laptop:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
chris@chris-laptop:~$
chris@chris-laptop:~$ export PATH=$PATH:/var/lib/gems/1.8/bin
chris@chris-laptop:~$
chris@chris-laptop:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/lib/gems/1.8/bin
chris@chris-laptop:~$
Mój klejnot się nie ładuje!
"ruby gems nie ładuje się nawet po zainstalowaniu " podkreśla częsty problem przy użyciu wielu różnych wersji Rubiego; czasami środowisko Gem i ścieżka Gem są synchronizowane:
rb(main):003:0> Gem.path
=> ["/opt/ruby1.9/lib/ruby1.9/gems/1.9.1"]
irb(main):004:0> exit
Każdy proces Rubiego szuka tylko w jednym miejsce na swoje klejnoty.
:~/$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.7
- RUBY VERSION: 1.9.1 (2009-05-12 patchlevel 129) [x86_64-linux]
- INSTALLATION DIRECTORY: /opt/ruby1.9/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /opt/ruby1.9/bin/ruby1.9
- EXECUTABLE DIRECTORY: /opt/ruby1.9/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /opt/ruby1.9/lib/ruby/gems/1.9.1
- /home/mark/.gem/ruby/1.9.1
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
Spójrz uważnie na wyjście środowiska gem:
- GEM PATHS:
- /opt/ruby1.9/lib/ruby/gems/1.9.1
To nie jest ta sama ścieżka co zwrócona przez Gem.ścieżka:
["/opt/ruby1.9/lib/ruby1.9/gems/1.9.1"]
Trudno powiedzieć, co dokładnie spowodowało zmianę lib/ruby
na lib/ruby1.9
, ale najprawdopodobniej programista pracował z wieloma wersjami Rubiego. Szybki mv
lub ln
rozwiąże problem.
Jeśli potrzebujesz pracować z wieloma wersjami Rubiego, powinieneś używać rvm .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:36
Jak zauważył @ Chris, musisz dodać środowisko klejnotów do swojej ścieżki. Można to zrobić przez:
echo 'export PATH=$PATH:/var/lib/gems/1.8/bin' | tee --append ~/.bashrc
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-08 20:09:33
Folder, w którym przechowywane są perełki musi znajdować się na twojej ścieżce, na przykład moja to:
/home / victor/.gem / ruby / 1.8 / bin
Sprawdź ścieżkę wpisując
echo $PATH
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 09:07:20
Widać, że podczas instalacji rubygems, teraz w ubuntu 9.04, mam ten problem. Zauważyłem, że w "gem environment" katalog wykonywalny to "/var/lib/gems/1.8/bin", zamiast "/usr/bin"... To jest problem z rubygems lub z ubuntu 9.04??
Napotkanym rozwiązaniem jest dodanie "/ var / lib / gems / 1.8 / bin " do mojej $PATH robiąc to: export PATH = $PATH: / var / lib / gems / 1.8 / bin Ale to nie jest zapisane... jak Mogę zapisać swoją ścieżkę?
Dzięki...Resolvi: coloquei o export PATH = $PATH: / var / lib / gems / 1.8 / bin no ~/.bashrc! =]
Mkmf jest częścią pakietu ruby1. 9.1-dev. Ten pakiet zawiera pliki nagłówkowe potrzebne do bibliotek rozszerzeń dla Ruby 1.9.1. Musisz zainstalować pakiet ruby1. 9. 1-dev wykonując:
Sudo apt-get install ruby1.9.1-dev
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-02 11:36:20