我创建一个宝石集
$ rvm gemset create r3
$ rvm gemset use r3
$ gem install rails -v3.2.13
此时
$ rails -v
现在显示
$ Rails 3.2.13
但是每次我与我分叉的项目捆绑在一起时,我发现
rails -v
显示Rails 4.0.1
- 然后在运行测试
时给出相关项目的问题(4.0.1
与3.2.13
冲突)。
我的问题是 - 如果我的宝石文件只有:
$ cat Gemfile
source 'https://rubygems.org'
gemspec
这是怎么回事? 如何让我的命令行 ruby 版本保持在 3.2.13
而不切换到 4.0.1
一旦它切换到 4.0.1
我似乎就被困在该宝石集上,并且要创建一个3.2.13
的宝石集,我必须重新开始。
捆绑包的工作原理是查找与 Gemfile 限制兼容的最新版本的 Gem。 在这种情况下,这些限制来自 gemspec 文件,该文件可能允许高于 3.2.13 的 Rails 版本。 因此,它选择了允许的最新版本的Rails - 即4.0.1。 您的 RVM 配置在此处无关紧要。
要将特定分支锁定到 Rails 3.2.13,只需添加以下内容:
gem 'rails', '3.2.13'
到分叉中的宝石文件。 这会在运行 bundle 时将本地版本锁定为 3.2.13。
如果您希望显式使用不同版本的rails
那么根据Gemfile
计算的版本,那么您需要使用:
NOEXEC_DISABLE=1 rails ...
您可以使用以下方法将其永久用于单 shell 会话:
export NOEXEC_DISABLE=1
rails ...
并禁用在通过计算的版本中加载 gem Gemfile
将其放入您的 shell 初始化文件(如 ~/.bash_profile
或 ~/.zlogin
):
export NOEXEC_DISABLE=1
发生这种情况是因为 RVM 会安装 gem rubygems-bundler
它会在您运行 gem 二进制文件时自动分析您的Gemfile
,如果通过此文件指定的版本可用,则会加载该版本(即使它仅指定为 gem 的依赖项)。