1

rbenv では、gem から実行可能ファイルを実行している場合、Gemfile とは異なるバージョンの gem をロードしないように、「bundle exec」を手動で実行する必要があります。

Gemfile が現在のディレクトリに存在する場合、rbenv shim で「bundle exec」を実行することの欠点はありますか? ディレクトリツリーのさらに上位にあるGemfileを処理しないため、これはやや単純なアプローチですが、その動作は必要ありません。この変更により、現在のシムの名前が「bundle」でないことも確認されます。そうしないと、無限再帰が発生する可能性があります。

パッチ:

diff --git a/libexec/rbenv-rehash b/libexec/rbenv-rehash
index eebc4d3..00f4ec0 100755
--- a/libexec/rbenv-rehash
+++ b/libexec/rbenv-rehash
@@ -38,7 +38,14 @@ create_prototype_shim() {
 #!/usr/bin/env bash
 set -e
 export RBENV_ROOT="$RBENV_ROOT"
-exec rbenv exec "\${0##*/}" "\$@"
+# This only handles Gemfile in current dir
+if [[ \$RBENV_AUTO_BUNDLE = '1' && -e Gemfile && \`basename \$0\` != 'bundle' ]]; then
+  exec 3>/dev/tty
+  echo "rbenv: Using Gemfile" >&3
+  exec rbenv exec bundle exec "\${0##*/}" "\$@"
+else
+  exec rbenv exec "\${0##*/}" "\$@"
+fi
 SH
   chmod +x "$PROTOTYPE_SHIM_PATH"
 }

自動「バンドル実行」動作を有効にするには、環境変数 RBENV_AUTO_BUNDLE=1 を設定する必要があります。

十分な需要があれば、パッチを提出するかもしれません。

パッチを適用するには、パッチ ファイルを .rbenv ディレクトリに置き、実行します。

git apply PATCHFILE

パッチをテストするには、シムを削除して「rbenv rehash」を実行する必要があります。

元に戻すには:

git apply -R PATCHFILE

また

git checkout -- libexec/rbenv-rehash

その後、シムを再度作成します。

ruby ファイルを読み込んだときに vim がいくつかの ruby​​ を実行するように見えますが、bundle exec もそれで使用されます。経由で自動動作を無効にすることができますlet $RBENV_AUTO_BUNDLE=0

4

1 に答える 1

2

rbenv では、gem から実行可能ファイルを実行している場合、Gemfile とは異なるバージョンの gem をロードしないように、「bundle exec」を手動で実行する必要があります。

rbenv-bundlerプラグインを使用しない限り、これは自分でその動作を再実装しようとするよりも賢明なアプローチです。そのプラグインに欠けているものがある場合は、そこに貢献してください。

于 2012-05-14T17:59:15.607 に答える