0
  • Bundler v1.2.3
  • RubyGems v1.8.24
  • RVM(最新)
  • Rails v3.2.9

Railsアプリケーションにこれらのデフォルト()でbinstubsを使用しています~/bundle/config

---
BUNDLE_PATH: .bundle
BUNDLE_BIN: .bundle/bin

次に、 (chwdのzshスクリプトを介して、それほど大きなセキュリティホールではないので)追加.bundle/binして、正しいgemバイナリを利用できるようにします。$PATH

そして、これは2つの問題を除けば、ほとんど問題ありません。

問題1

アプリにcdして入力すると、グローバルにインストールされているgemgem listのリストが表示されます(アプリのgemではありません)。アプリのgemの場合、入力する必要があり、機能します。私はそれと一緒に暮らすことができます。bundle exec gem list

第2号

バンドルの外部に存在する(つまり、Gemfileにない)ローカル(アプリに対してローカル)のgemをインストールすることはできません。そのような例の1つは、gem-ctagsgemです。

理論的には、他のすべてのローカルgemと同じディレクトリにインストールできます。

gem install --install-dir .bundle/ gem-ctags

しかし、私はそれを使用する方法がありません、それはこのコマンドをタイプしています:

☺ gem ctags
ERROR:  While executing gem ... (RuntimeError)
    Unknown command ctags

☹ bundle exec gem ctags
ERROR:  While executing gem ... (RuntimeError)
    Unknown command ctags

それを機能させる方法はありますか?

PS:

  • gem-ctagsグローバルgemにインストールして実行すると、正常gem ctagsに機能します)
  • 私はrubygems-bundlerについて知っていますが、それを使用するよりも、binstubsだけを機能させたいと思っています(他に方法がない場合を除きます...)

アップデート

問題3

gem cleanup$ GEM_PATHを正しく設定していても(@mpapisの提案のように)機能しません:

☺ gem cleanup                                                                       
Cleaning up installed gems...
Attempting to uninstall rake-10.0.0
Unable to uninstall rake-10.0.0:
    Gem::InstallError: gem "rake" is not installed
Attempting to uninstall ffi-1.1.5
Unable to uninstall ffi-1.1.5:
    Gem::InstallError: gem "ffi" is not installed
Attempting to uninstall dalli-2.2.1
Unable to uninstall dalli-2.2.1:
    Gem::InstallError: gem "dalli" is not installed
Clean Up Complete

を入力すると、これらのgemがすべてインストールされていることがわかりますgem install

4

2 に答える 2

1

使用したい場合.bundle/は宝石を入れる必要がありますGemfile

あなたはそれを機能させるために、の外でrubygemsプラグインを使用しようとしGEM_PATHています:あなたはしなければならないでしょう:

export GEM_PATH="$GEM_PATH:$PWD/.bundle"

第3四半期の更新:

ヘルプによると:

$ gem help cleanup
...
  Description:
    The cleanup command removes old gems from GEM_HOME.  If an older version is
    installed elsewhere in GEM_PATH the cleanup command won't touch it.

つまり、これが必要です。

export GEM_HOME="$PWD/.bundle"

副作用としてそれは必要性を取り除くべきです--install-dir .bundle/

ご存知のとおり、バンドラーとRubygemsの両方で予期しないことを行っており、間違いなくRVMはフローの準備ができていません。

于 2012-12-14T16:15:39.543 に答える
0

参考までに、zshに動的に追加.bundle/bin$PATHてすべてを機能させる方法を次に示します(つまり、上記の両方の問題が解決されています)。.bundle$GEM_PATH

export DEFAULT_GEM_HOME=$GEM_HOME

autoload -U add-zsh-hook
add-zsh-hook chpwd chpwd_add_binstubs_to_paths

function chpwd_add_binstubs_to_paths {
  # always delete from $OLDPWD (.bundle/bin/ from $PATH and .bundle/ from $GEM_PATH)
  export PATH=${PATH//$OLDPWD\/\.bundle\/bin:}
  export GEM_PATH=${GEM_PATH//$OLDPWD\/\.bundle:}
  export GEM_HOME=$DEFAULT_GEM_HOME

  if [ -r $PWD/Gemfile.lock ] && [ -d $PWD/.bundle/bin ]; then
    # add .bundle/bin to $PATH and .bundle/ to $GEM_PATH (deleting existing entries first)
    export PATH=$PWD/.bundle/bin:${PATH//$PWD\/\.bundle\/bin:}
    export GEM_PATH=$PWD/.bundle:${GEM_PATH//$PWD\/\.bundle:}
    export GEM_HOME=$PWD/.bundle
  fi
}

# initially execute `chpwd_add_binstubs_to_paths` as we might be opening a new shell in Rails project's directory
chpwd_add_binstubs_to_paths
于 2012-12-15T17:25:01.527 に答える