.rvmrcとmac osx lion「復元」の問題


0

数日前にライオンに切り替えたところ、フォルダ内でTerminalを終了すると、開いたときに(他のタブと一緒に)そのフォルダに戻ったはずです。

これは確かに良い機能ですが、問題はパスを「更新」しないことです。あなたがあなたのappフォルダに.rvmrcファイルを持っていたとしても、それは再びrubyとgemsetを設定しないでしょう。あなたは実際にcdしてまた戻って来なければならないでしょう、それはrvmrcを持つ目的を無効にします。

これは既知のバグですか?それに対する修正/パッチは既にありますか?

編集 Chris Pageの助言に従って、私は追加しました cd "$PWD" 私の.bashrc(私の.bash_profileによってロードされる)の最後の行に

これは順番にrvmrcを「ロード」します。

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]

ご覧の通り、gemset( "Using / Users ..."で印刷されています)はロードされましたが、gem listを実行しようとしてrubyのバージョンを表示しようとしてもまだロードされていないことがわかります。 (Rubyのバージョンは1.9.2になるはずです)

編集2

私は自分のrvmを更新しましたが、今ではどの修正も機能していません!

それは私のrvmの中のgemsetを使っていることを出力します、しかし私がgem envをするとき、私はこれを得ます:

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

している cd ../ その後 cd myfolder そして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

これは正しい環境です。ご覧のとおり、gemsetは(gemと共に)正しくロードされていますが、rvmrc ruby​​の代わりにシステムrubyを使用しています。


できます source path/to/.rvmrc...
Matt Ball

どこ?毎回これをする必要がありますか?私は誤ってcdコマンドを間違ってタイプしたようです。 cd ./ ディレクトリを更新してrvmrcをリロードします。解決策を探しているのですが、それ以外のものを入力する必要はありません。
corroded

あなたの.bash_profileにcd ./を追加してみましたか?
Warren Pena

1.6.10より古いバージョンのRVMを使用していますか?そのリリースは含まれています cb649ba (対話型シェルの場合は常に.rvmrcをロードします(同じディレクトリに新しいタブを開きます)。、2011-05-14)。最新のバージョンに(多かれ少なかれ)存在するその変更は、それをロードさせるはずです .rvmrc 初期の、継承された現在の作業ディレクトリ(すなわち ターミナル しました chdir(2) シェルに起動させる代わりに、シェルを起動する前に cd それ自体(RVMがそれに気付くことができる場所))。
Chris Johnsen

うーん、確認してはい、私はrvm 1.6.5を使っていました。だから私はただアップグレードして私の修正を取り除かなければならないのではないと思いますか?しばらくしてから確認します。あなたが答えとしてこれを投稿することができれば私はこれを確認したら私はそれを受け入れることができます。ありがとうございます。
corroded

回答:


1

1.6.10より古いものを実行している場合は、RVMのインストールをアップグレードしてみてください(アクティブなバージョンを確認してください)。 rvm --version

いくつかのシェルでは:

rvm get latest

次に、もう一方の既存のシェルを再起動するか、または実行します。 rvm reload それらの中で。

注:OPが直面したもう1つの問題は、RVMがシェルにロードされた後のPATH操作でした。これにより、「正しいgemsetが選択されたが、間違ったRubyのインストール」効果が「cd out、cd in」の後に消えてしまう(RVMがその時点でPATH内の位置を再アサートしていたため)。シェルを含むディレクトリでシェルが起動されたとき .rvmrc RVMが最後になることが重要です 前に付ける PATHへの要素(少なくともを含む可能性のあるPATH要素 ruby (など)Rubyインストールが .rvmrc 有効になります)。


RVMはソースにアレンジします .rvmrc シェルを「フック」してファイルを cd コマンド( cd シェル関数 バッシュ のエントリ chpwd_functions にとって zsh )通常これはそれがどんな「普通の」も捕らえることを可能にします cd RVMをロードした後に入力するか、またはソーススクリプトを介して実行するように指示してください。

私にはテストするLionがありませんが、それが機能する方法はそれが疑われています ターミナル フォーク、電話 chdir(2) その後、シェルを実行して新しいシェルの初期作業ディレクトリを確立します。これは、RVMがシェル初期設定ファイルにロードされるまでにディレクトリがすでに確立されていることを意味します。

歴史はちょっと濁っているように見えますが、RVMはそれらを調達するためのいくつかのサポートを持っていました .rvmrc 最初にロードされたときにシェルの初期作業ディレクトリにあるファイル。それは多分それがあることを意図していたように見えます 画面 RVM内 cb649baをコミットする (対話型シェルの場合は常に.rvmrcをロードする(同じディレクトリに新しいタブを開く)。、2011-05-14)必要条件を緩和してソースにする .rvmrc RVMが最初にロードされたときの対話型シェル用のファイル。このコミットはRVMの1.6.10リリースで最初に存在しました。それ以降、コードは少し変更されていますが、最新バージョンでも(多かれ少なかれ)同じように機能します。


実際に私はちょうどチェックし、それは宝石をロードしますが、それはレール、スポーク、キュウリのような私のコマンドをロードしませんか?それはスローしてエラーになります。 /eumir/.rvm/gems/ruby-1.9.2-p180@evolux/bin/spork:9
corroded

しかしgem listとgem envを実行すると正しいgemsetがロードされたことがわかります。私はそれが再び動作するようにするには、cdしてまたcdし直す必要がありました...
corroded

大丈夫私はちょうどチェック、それは正しいgemsetが間違ったルビーをロードする。それが1.9.2であるべきであるときruby -vは私に1.8.7を与えます。なぜこれが起こるのか知っていますか?
corroded

「レール、スポーク、キュウリのような私のコマンドはロードされません」と言ったときの意味がわかりませんあなたはあなたを使っていますか .rvmrc それらのコマンドを実行するには?正確には何行目ですか .rvmrc? (私は通常置くだけ rvm use ruby-1.9.2-head@mygemset そこで。)
Chris Johnsen

ああ私は私のサーバーまたは "spork cuc"を起動するために "rails s"を試してみると、それはrubygemsがロードされていないと言う。自分のディレクトリからcdして、 "spork cuc"または "rails s"でcdしたときの動作
corroded

2

Lion Terminalはシェルが起動する前にchdir()で設定して作業ディレクトリを選択/復元します。作業ディレクトリに関連する何らかの追加作業を自動的に実行したい場合は、$ PWDを使用してコマンドを実行する起動スクリプトを使用してシェルをカスタマイズする必要があります。

あなたがbash(デフォルト)を使っていると仮定して、あなたがしたいことは〜/ .bashrcにこのようなものを追加することです。

cd "$PWD"

私はrvmcには馴染みがありませんが、シェルの起動スクリプトを使用して "cd"コマンドをカスタマイズする必要があると思いますので、その後は必ずこのコマンドを発行してください。また、まだシェルの起動スクリプトがない場合は、通常〜/ .bash_profileを作成し、それが存在する場合は〜/ .bashrcを実行することをお勧めします(StackExchangeを見回すか、Googleを使用してこの共通の慣用句を見つけます)。


私は私のbashrcにcdのものを追加しました、そしてそれはほとんどうまくいった。質問を更新しますので、私の言っていることがわかるようにします。
corroded

0

私はそれが「修正」ではないことを知っています、しかしあなたはそれがパス情報を保存せずに終了するコマンド+ option + qで端末を終了することができます。

あるいはiTerm2( http://www.iterm2.com/ )、それはデフォルトの端末よりもいくつか良いことがあります。


それでも私は必要なディレクトリにcdすることができます。私が考えていたのは、ライオンがそれを1つまたは複数のディレクトリに開いた場合、終了したときに、自動的にrvmrcをロードしたはずです
corroded

0

修正1: さて、より良い解決策を見つけました。だから私はという名前のスクリプトを作成しました .loadrvmrc そして "cd ./"だけを含んでいた(これもchmod + x it)

それから私はそれを私の.bash_profileにロードしましたが、順番にロードする必要があることに注意してください。

まず、あなたの.bashrcをロードします。

source ~/.bashrc

それからあなたのパス(これはrvmをロードします:

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

そして.loadrvmrcスクリプト

source ~/.loadrvmrc

ほら!端末を閉じて、すべてのタブとそれぞれの.rvmrcsで開くことができます。

=========== 修正2 :(プログラム以外)

私は今のところそれを修正しました。多分それはrvmかbashrcのためのタイミング問題である、従って私は確かではない。誰かがこの問題に対するより良い修正/回答を投稿することができるならば、そうしてくださいそして私はこの質問のために受け入れられた答えを変えます。

とにかくデフォルトのターミナルで、私はただ変更しました Terminal > Preferences > Settings そしてスタートアップをチェックして追加 cd ./ 起動スクリプトとして。

端末を起動すると次のようになるので、これはまだ私にとって醜いです。

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$ 

どちらかといえば許容できるものです(より良い解決策が出るまで)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.