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
。