当当前目录中存在Gemfile时,让rbenv填充运行“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
然后再次重新创建垫片。
看起来vim在加载ruby文件时会运行一些ruby,而bundle exec也会用到它。您可以通过let $RBENV_AUTO_BUNDLE=0
停用自动行为。
答案 0 :(得分:2)
如果你正在运行,rbenv要求你手动运行“bundle exec” 来自gem的可执行文件,以避免加载其中的不同版本 gem与你的Gemfile比较。
除非你使用rbenv-bundler插件,否则恕我直言的方法比尝试自己重新实现这种行为更安全。如果该插件中缺少任何内容,请在那里做出贡献。