4

システムの gem のみを使用するように gem を構成したいと考えています$HOME/.gem。これは、アクセスするスクリプトを作成してGem.pathいて、ホーム ディレクトリの gem へのパスを返したくないためです。

などで明示的に設定したり、GEM_HOMEそのようなものを設定したりしていないと確信しています。.bashrc.bash_login

しかしGem.path、最初にホームディレクトリの宝石を返します:

irb
> Gem.path
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"]

これを止めることはできますか?どこで構成されていますか? それとも、最初にホームディレクトリを調べるのがデフォルトですか?

これを構成できない場合、gem のシステム パスを正規表現ハッカーで返すことはできますか?

詳細:

which ruby
/usr/local/bin/ruby
ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

gem env
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/1.9.1
     - /home/nfm/.gem/ruby/1.9.1
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

アップデート:

したがって、明らかにこれは次のように構成できます~/.gemrc

# Note the use of a symbol before the colon - the string version doesn't work!
:gempath:
  - /usr/local/lib/ruby/gems/1.9.1

ただし、これは起動しても効果がないようですirb。これは、構成ファイルが YAML であり、明らかに起動yaml時にロードされていないという事実と関係がありirbます (これについては不明です!):

$ irb
> Gem.path
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"]
> Gem.configuration.path
=> ["/usr/local/lib/ruby/gems/1.9.1"]
# Ready for a WTF moment?
> Gem.path
=> ["/usr/local/lib/ruby/gems/1.9.1"]

したがって、以下の回答は、正しい動作を得るための唯一の一貫した方法のように思えますが、それ~/.gemrcが機能し、構成をまとめるより良い方法であると想定している場合でも.

ただし、おそらく yaml が明示的にロードされているため、:gempath:my の設定はRails アプリ~/.gemrcの my にあるスクリプトのコンテキストで機能しました。Rakefile

yaml で何が起こっているのか正確にはわかりませんが、この説明は私がここで見ているものと一致しているようです。

モッドアップ!:P

4

1 に答える 1

4

ここに上書きします:

#in ~/.bashrc
export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1
于 2010-09-10T08:33:31.217 に答える