RVM 和 Gemfile - 并不总是加载正确的 ruby​​,只有在 'cd .. & cd myproject' 时

Posted

技术标签:

【中文标题】RVM 和 Gemfile - 并不总是加载正确的 ruby​​,只有在 \'cd .. & cd myproject\' 时【英文标题】:RVM and Gemfile - not always loading correct ruby, only when 'cd .. & cd myproject'RVM 和 Gemfile - 并不总是加载正确的 ruby​​,只有在 'cd .. & cd myproject' 时 【发布时间】:2014-03-10 15:22:38 【问题描述】:

TL;DR:每次我打开一个新的iterm2 标签时,rvm 都会回到默认版本,它不使用 Gemfile ruby​​ 版本

我的 Gemfile 有

source 'https://rubygems.org'
ruby '2.0.0'

我使用 rvm 1.25.14。

RVM 很聪明,可以读取 gemfile 中的 ruby​​ 版本,除了这种边缘情况

在做

# NOTE: iterm2 
$ cd myproject
$ ruby -v
> ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin12.5.0]

但是 cmd+t,创建一个新标签,停留在那个目录中,

$ pwd
>../myproject
$ ruby -v
> ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0]

ruby 1.9.3 是我的默认版本,这很好。我的 bash (或 .zshrc )中缺少什么?完成这项工作?

#FILE .zshrc
#...stuff

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting

使用cmd+d,垂直分割终端,也有同样的问题。 rvm 进入默认状态,忽略 Gemfile。感谢大家的帮助!

【问题讨论】:

我遇到了同样的问题,我正在使用一个简单的解决方法:在.bashrc 的末尾添加了cd .(在您的情况下为.zshrc),现在它可以正常工作了,但我知道这不是一个真正的答案,因为它符合我的需要,所以我没有花更多时间在上面。 @zrl3dx 请回答:) @zrl3dx 这对我不起作用。 cd . 在这里什么都不做。 cd .. 后跟 cd myproject 工作... 奇怪了,以后用zsh测试一下。 我认为线索是iterm2。我刚刚在别人的计算机上测试了terminal,并且(似乎)相同的设置有效。 【参考方案1】:

我似乎对于本地开放终端rvm 不要加载它的脚本。将代码添加到.bashrc 的末尾,然后应该:

if [ -z "$MY_RUBY_HOME" ]; then
   [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
fi

【讨论】:

因为夸大和虚假陈述而投反对票。如果提供的话,RVM 确实使用 Gemfile ruby​​,但我有一个边缘情况,它不起作用。 @oma 修复了答案 这对你有用吗?当cd-ing 进入目录时,它已经对我有效,但不适用于新选项卡(没有执行cd-ing)。我看不出您的回答与问题中的.zshrc 有什么不同。 您的默认 rvm ruby​​ 与您在打开新标签的项目中使用的 ruby​​ 是否不同?仅供参考,我在 Q 中添加了 iterm2 和 zsh @oma 我没有为测试项目指定默认 rvm,我只是删除了 .ruby- 文件,并在 Gemfile 中指定了 ruby​​ 版本。但无论如何,我想问题出在.zshrc 上。尝试在其中插入一条回显线,然后打开一个新终端。【参考方案2】:

这应该与 shell 和终端无关(不幸的是,我无法在 iterm2 上测试它,因为我没有任何 Mac 机器):

cd $PWD 添加到您的 .zshrc 中,这将强制 RVM 加载当前 gemset。

【讨论】:

我给了你赏金,即使它是一个 hack 并且它没有工作;) pushd 然后 popd 做了 cd $PWD 做不到的事情。请将此添加到您的答案中,我会将其标记为“正确”。 .zshrc 上做这件事并没有解决我,但在.zlogin 上做它确实解决了。猜猜重要的部分是它在 rvm 的采购之后。 renatolond,是的,这是正确的答案。【参考方案3】:

只需在 RVM 脚本后的 .zlogin 中添加 cd .

【讨论】:

以上是关于RVM 和 Gemfile - 并不总是加载正确的 ruby​​,只有在 'cd .. & cd myproject' 时的主要内容,如果未能解决你的问题,请参考以下文章

在创建新的 Rails 应用程序时

Ruby 和“您必须使用 OpenSSL 支持重新编译 Ruby 或更改 Gemfile 中的源代码”

你已经激活了 X,但是你的 Gemfile 需要 Y

在 mac 上从 1.1 降级到 OPENSSL 版本 1.0

为什么gem`therubyracer`默认在Gemfile中注释掉了?

Rails:Gemfile.lock 需要“找不到捆绑程序”(2.2.11)。 (Gem::GemNotFoundException)