Pow、RVM和ZSH不一起工作

9
我试图让Octopress(http://octopress.org/)正常工作,但是遇到了一些问题。我正在使用POW(http://pow.cx/),但它似乎无法为我加载正确的Ruby版本(使用RVM)。它总是使用RVM默认的ruby版本而不是在.rvmrc中指定的版本。我的RVM默认Ruby版本是:ruby-1.9.3-p125。在我的.rvmrc文件中,我有这个: rvm use 1.9.2 当我访问我的网站时,在浏览器中出现以下错误:
LoadError: cannot load such file -- bundler/setup
~/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
~/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
~/Sites/Lejnus/lejnus/config.ru:1:in `block in <main>'
~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/builder.rb:4:in `instance_eval'
~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/builder.rb:4:in `initialize'
~/Sites/Lejnus/lejnus/config.ru:1:in `new'
~/Sites/Lejnus/lejnus/config.ru:1:in `<main>'
~/Library/Application     Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:50:in `eval'
~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:50:in `load_config'
~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:43:in `initialize'
~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:13:in `new'
~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:13:in `run'
~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/bin/nack_worker:4:in `<main>'

为什么在我的 .rvmrc 文件中指定了1.9.2,但程序却使用1.9.3-p125?如果我将1.9.2设置为默认版本当然可以运行... 难道它不应该自动为我执行这个 “magic”,使用正确的 ruby 版本吗?

rbenv比rvm更加清晰简单。我在使用rvm时尝试了很多方法,但都不成功,而rbenv却非常好用。 - frp
检查是否使用bash而不是zsh出现了相同的问题。 - frp
我在Bash中尝试过了,没有任何区别。 - Linus
3个回答

15

好的,看起来POW正在放弃使用RVM。

我需要在我的项目根目录中运行以下命令才能使其正常工作: rvm env . -- --env > .powenv


1
我刚试图运行这个命令,但是出现了一个错误,报错信息是“未识别的命令行参数:'. --env'(请参阅:'rvm使用')”,这正常吗? - Yannick Schall
@YannickSchall 我每周都使用这个命令,直到上周升级RVM后开始看到这个消息。我认为某种支持方式被取消了,但我找不到任何关于它的文档。 - jakeonrails
我通过在项目根目录添加.powrc并使用以下代码解决了问题:if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".rvmrc" ]; then source "$rvm_path/scripts/rvm" source ".rvmrc" fi - Yannick Schall

2
我通过在项目根目录添加 .powrc 文件并加入以下代码来解决了这个问题。
if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".rvmrc" ]; then
  source "$rvm_path/scripts/rvm"
  source ".rvmrc"
fi

[编辑:这在Pow文档中被推荐使用。]
注:此处为IT技术相关内容,建议参考Pow文档。

1
这是解决我的问题的方法:
rvm env -- `rvm current` > .powenv
您还可以创建一个rvm hook(如此处所述),以在更改当前ruby环境时自动切换.powenv:
# ~/.rvm/hooks/after_use_update_powrc for file in `ls ~/.pow/` ; do POW_LINK_TARGET=`readlink ~/.pow/$file`
if [ `pwd` = $POW_LINK_TARGET ]; then rvm env -- ``rvm current`` > .powenv fi done 别忘了将其设置为可执行文件:
chmod +x ~/.rvm/hooks/after_use_update_powrc

嗨,Pavel,rvm env -- \rvm current`rvm env之间有什么区别吗?对我来说,只需执行rvm env > .powenv`就可以正常工作。 - Patrick Oscity
我没有尝试过那个。这是我在某个地方读到的,并且发布了它,因为它已经被证实可以工作。但你可以轻松测试并查看两个命令的输出是否有差异。 - Pavel Nikolov
对于我来说没有什么区别,但在某些情况下可能会有所不同。 - Patrick Oscity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接