.rvmrc i mac osx lion problem „przywracania”

0

Kilka dni temu po prostu przełączyłem się na lwa i zauważyłem, że po wyjściu z Terminalu w folderze, kiedy go otworzysz, powinien wrócić do tego folderu (razem z innymi kartami).

Jest to naprawdę dobra funkcja, ale problem polega na tym, że nie „odświeża” ona twoich ścieżek. Oznacza to, że nawet jeśli masz plik .rvmrc w folderze aplikacji, nie ustawi on ponownie ruby ​​i gemsetu. będziesz musiał zrezygnować z CD i powrócić ponownie, co pokonuje cel posiadania rvmrc.

Czy to znany błąd i czy są już jakieś poprawki / poprawki?

EDYTOWAĆ Dodałem, zgodnie z radą Chrisa Page cd "$PWD" w ostatnim wierszu mojego .bashrc (który jest ładowany przez mój plik .bash_profile)

To z kolei „ładuje” rvmrc zgodnie z oczekiwaniami:

Last login: Tue Aug  9 11:29:09 on ttys003
Using /Users/eumir/.rvm/gems/ruby-1.9.2-p180 with gemset mygemset

eumir$ gem list
/Users/eumir/.rvm/rubies/ruby-1.9.2-p180/bin/gem:12:in `require': no such file to load -- rubygems (LoadError)
from /Users/eumir/.rvm/rubies/ruby-1.9.2-p180/bin/gem:12

eumir$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10.2.0]

Jak widać, załadował on gemset (wydrukowany przez „Using / Users ...”), ale próba zrobienia listy klejnotów i pokazania rubinowej wersji mówi, że nadal jej nie ładowała. (wersja ruby ​​powinna być 1.9.2)

EDYCJA 2

Zaktualizowałem mój rvm i teraz żadna z poprawek nie działa!

Wypisuje, że używa gemsetu w moim rvm, ale kiedy robię gem env, otrzymuję to:

eumir$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.6
  - RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
  - INSTALLATION DIRECTORY: /Users/eumir/.rvm/gems/ruby-1.8.7-p174@awetest
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/eumir/.rvm/gems/ruby-1.8.7-p174@awetest/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-11
  - GEM PATHS:
     - /Users/eumir/.rvm/gems/ruby-1.8.7-p174@mygemset
     - /Users/eumir/.rvm/gems/ruby-1.8.7-p174@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org/", "http://gemcutter.org"]
     - "gem" => "--no-ri --no-rdoc"
  - REMOTE SOURCES:
     - http://rubygems.org/
     - http://gemcutter.org

robić cd ../ i wtedy cd myfolder a następnie wyniki gem env:

eumir$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.7.2
  - RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10.4.0]
  - INSTALLATION DIRECTORY: /Users/eumir/.rvm/gems/ruby-1.8.7-p174@awetest
  - RUBY EXECUTABLE: /Users/eumir/.rvm/rubies/ruby-1.8.7-p174/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/eumir/.rvm/gems/ruby-1.8.7-p174@awetest/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-10
  - GEM PATHS:
     - /Users/eumir/.rvm/gems/ruby-1.8.7-p174@mygemset
     - /Users/eumir/.rvm/gems/ruby-1.8.7-p174@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org/", "http://gemcutter.org"]
     - "gem" => "--no-ri --no-rdoc"
  - REMOTE SOURCES:
     - http://rubygems.org/
     - http://gemcutter.org

co jest właściwym środowiskiem. Jak widać, gemset został załadowany poprawnie (razem z klejnotami), ale nadal używa ruby ​​systemowego zamiast rubinu rvmrc.

corroded
źródło
Możesz po prostu source path/to/.rvmrc...
Matt Ball
gdzie? czy muszę to robić za każdym razem? przypadkowo błędnie wpisałem polecenie cd i najwyraźniej cd ./ odświeży katalog i przeładuje rvmrc. Szukam rozwiązania, które nie będzie mnie potrzebowało do wpisania niczego innego
corroded
Czy próbowałeś dodać cd ./ do swojego .bash_profile?
Warren Pena
Czy używasz wersji RVM starszej niż 1.6.10? To wydanie zawiera cb649ba (Zawsze ładuj .rvmrc, jeśli jest w interaktywnej powłoce (otwórz nową kartę w tym samym katalogu)., 2011-05-14)]. Ta zmiana, która (bardziej lub mniej) istnieje w najnowszych wersjach, powinna pozwolić na jej załadowanie .rvmrc pliki nawet dla początkowego, odziedziczonego bieżącego katalogu roboczego (tj. Terminal zrobił chdir (2) przed uruchomieniem powłoki zamiast mieć powłokę cd sam (gdzie RVM mógł to zauważyć)).
Chris Johnsen
hmmm po sprawdzeniu, tak używałem rvm 1.6.5. więc myślę, że źle po prostu trzeba uaktualnić i zabrać moją poprawkę? Spróbuję to zrobić za chwilę i sprawdzić. Jeśli mógłbyś również opublikować to jako odpowiedź, mogę to zaakceptować, gdy tylko to potwierdzę. Dzięki!
corroded

Odpowiedzi:

1

Spróbuj zaktualizować instalację RVM, jeśli używasz czegoś starszego niż 1.6.10 (sprawdź swoją aktywną wersję za pomocą rvm --version ).

W niektórych skorupach:

rvm get latest

Następnie uruchom ponownie inne istniejące powłoki lub uruchom rvm reload w nich.

Uwaga: Kolejnym problemem, przed którym stanął OP, była manipulacja PATH po załadowaniu RVM do powłoki. Stworzyło to efekt „prawego zestawu klejnotów, ale niewłaściwa instalacja ruby”, który zniknął po „cd out, cd in” (ponieważ RVM w tym miejscu ponownie potwierdziłby swoją pozycję w PATH). Gdy powłoka jest uruchamiana w katalogu zawierającym .rvmrc ważne jest, aby RVM było ostatnią rzeczą prepend elementy do PATH (przynajmniej dowolne elementy PATH, które mogą zawierać ruby (itd.), aby instalacja Ruby została wybrana w .rvmrc będzie skuteczny).


RVM organizuje źródła .rvmrc pliki „zahaczając” skorupę cd polecenie (a cd funkcja powłoki w grzmotnąć , wpis w chpwd_functions dla zsh ). Zwykle pozwala to złapać „normalne” cd polecenie, które wpisujesz lub uruchamiasz za pomocą skryptu źródłowego po załadowaniu RVM.

Nie mam lwa do testowania, ale podejrzewam, że to działa Terminal widelce, połączenia chdir (2) , następnie wykonuje twoją powłokę, aby ustalić początkowy katalog roboczy nowej powłoki. Oznacza to, że katalog jest już ustanowiony do czasu załadowania RVM do pliku inicjującego powłokę.

Historia wydaje się trochę zabłocona, ale RVM ma pewne wsparcie w pozyskiwaniu .rvmrc plik w początkowym katalogu roboczym powłoki, gdy jest ładowany po raz pierwszy. Wygląda na to, że może tak było ekran -specyficzne, ale w RVM commit cb649ba (Zawsze ładuj .rvmrc, jeśli w powłoce interaktywnej (otwórz nową kartę w tym samym katalogu)., 2011-05-14) złagodzono wymaganie, aby było źródłem .rvmrc pliki dla dowolnej powłoki interaktywnej po pierwszym załadowaniu RVM. To zatwierdzenie było po raz pierwszy obecne w wersji 1.6.10 RVM. Kod zmienił się nieco od tego czasu, ale nadal działa w mniej więcej taki sam sposób w najnowszych wersjach.

Chris Johnsen
źródło
właściwie właśnie sprawdziłem i chociaż ładuje klejnoty, nie ładuje moich poleceń, takich jak szyny, szpikulec i ogórek? to rzuca i błąd: /Users/eumir/.rvm/gems/ruby-1.9.2-p180@evolux/bin/spork:9:in `require ': brak takiego pliku do załadowania - rubygems (LoadError) od / Users /eumir/.rvm/gems/ruby-1.9.2-p180@evolux/bin/spork:9
corroded
ale pokazując listę klejnotów i pokazy klejnotów ładował poprawny gemset. musiałem wydać płytę CD i wrócić do niej, aby to znowu działało ...
corroded
OK, właśnie sprawdziłem, ładuje poprawny gemset, ale niewłaściwy rubin. ruby -v daje mi 1.8.7, kiedy POWINIEN BYĆ 1.9.2. Czy wiesz, dlaczego tak się dzieje?
corroded
Nie rozumiem, co masz na myśli mówiąc „to nie ładuje moich poleceń, takich jak szyny, spork i ogórek”. Czy używasz swojego .rvmrc uruchomić te polecenia? Dokładnie jakie linie są w twoim .rvmrc? (Zwykle po prostu to robię rvm use ruby-1.9.2-head@mygemset tam.)
Chris Johnsen
ah, gdy próbuję „szyn”, aby uruchomić mój serwer lub „spork cuc”, mówi, że rubygems nie jest załadowany. kiedy wyjdę z mojego katalogu i cd w „spork cuc” lub „rails s” działa
corroded
2

Lion Terminal wybiera / przywraca katalog roboczy, ustawiając go za pomocą chdir () przed uruchomieniem powłoki. Jeśli chcesz automatycznie wykonać jakąś dodatkową pracę związaną z katalogiem roboczym, powinieneś dostosować powłokę za pomocą skryptu startowego, który wykonuje pewne polecenie za pomocą $ PWD.

Zakładając, że używasz basha (domyślnie), najwyraźniej chciałbyś dodać coś takiego w ~ / .bashrc:

cd "$PWD"

Nie jestem zaznajomiony z rvmc, ale zakładam, że musi użyć skryptu uruchamiania powłoki, aby dostosować polecenie „cd”, więc pamiętaj, aby wydać to polecenie po tym. Ponadto, jeśli nie masz jeszcze skryptów uruchamiania powłoki, zazwyczaj chcesz utworzyć ~ / .bash_profile i uruchomić go ~ / .bashrc, jeśli istnieje (rozejrzyj się po StackExchange lub użyj Google, aby znaleźć ten wspólny idiom).

Chris Page
źródło
Dodałem rzecz cd w moim bashrc i to prawie zadziałało. Zaktualizuję pytanie, abyś mógł zobaczyć, co mam na myśli
corroded
0

Wiem, że to nie jest „poprawka”, ale możesz wyjść z terminalu za pomocą polecenia + opcja + q, aby wyjść bez zapisywania informacji o ścieżce.

Możesz też użyć iTerm2 ( http://www.iterm2.com/ ), ma kilka lepszych rzeczy niż domyślny terminal.

Polo Ornelas
źródło
to spowodowałoby, że trafiłbym do katalogu, w którym muszę. myślałem o tym, czy lew otworzył go do katalogu (lub katalogów), w którym byłem, gdy wyszedłem, powinien automatycznie załadować rvmrc
corroded
0

Poprawka 1: Dobra znalazłem lepsze rozwiązanie. Dlatego stworzyłem skrypt o nazwie .loadrvmrc i który zawierał tylko „cd ./” (także chmod + x it)

Następnie załadowałem go do mojego pliku .bash_profile, ALE zauważ, że powinien być ładowany w porządku.

Najpierw załaduj .bashrc:

source ~/.bashrc

to twoja ścieżka (która ładuje rvm:

export PATH=/usr/local/mysql/bin:/usr/local/bin:/usr/local/sbin:/Users/eumir/.rvm/bin:$PATH

i NASTĘPNIE skrypt .loadrvmrc:

source ~/.loadrvmrc

Voila! Możesz zamknąć terminal i otworzyć go wszystkimi kartami i wszystkimi odpowiednimi .rvmrcs.

=========== Poprawka 2: (nieprogramowa)

Naprawiłem to na razie. Może to kwestia czasu dla rvm lub bashrc, więc nie jestem pewien. Jeśli ktoś może opublikować lepsze rozwiązanie / odpowiedź na to pytanie, zrób to, a zmienię zaakceptowaną odpowiedź na to pytanie.

W każdym razie w domyślnym Terminalu właśnie się zmieniłem Terminal > Preferences > Settings a następnie sprawdzono Uruchomienie i dodano cd ./ jako skrypt startowy.

Nadal jest to dla mnie brzydkie, ponieważ uruchomienie terminalu spowoduje

Last login: Tue Aug  9 11:43:06 on ttys003
eumir$ cd ./
Using /Users/eumir/.rvm/gems/ruby-1.9.2-p180 with gemset mygemset
eumir$ 

co jest do przyjęcia (dopóki nie pojawi się lepsze rozwiązanie).

corroded
źródło