RVM 切换 Rails 版本
RVM switching Rails Versions
情况是我计算机上的默认 gemset 指向 rails 5.0.0
。但是:我有一个使用非常旧的 rails 版本的应用程序。对于这个例子,假设应用程序使用:rails 2.1.1
。
当 cd'ed
进入此应用程序时,我的机器是否会自动切换到 rails 2.1.1
,因为 Gemfile
中指定了 rails 2.1.1
?或者:我是否需要 明确地 创建一个 gemset 以便我的应用程序和我的机器做 "rails 2.1.1 way" 的事情(而不是以“rails 5.0.0 方式(我的默认 gemset 中的 rails 版本)做事?
我担心的是,如果我的机器认为我在应用程序内部开发时使用 rails 5.0.0
而不是 rails 2.1.1
:那么 rails 命令(例如生成器)可能会创建文件并执行stuff "the rails 5.0.0 way" 而不是 "rails 2.1.1" 方式。
希望这是有道理的。这是我要通过此应用程序使用 rails 2.1.1
的 Gemset 来 "explicitly" 说明的方法
示例:
我创建了一个 gemset,为任何使用 rails 2.1.1
的应用指定
rvm gemset create rails_2_1_1
我指定要在此 gemset 上使用的 ruby 版本
rvm use 2.2.1@rails_2_1_1
然后我将 rails 的旧版本安装到这个 gemset 上:
gem install rails --version=2.1.1
现在这个 gemset 使用 rails 2.1.1
。
现在,在我的应用程序的根目录中,我指定了一个 .ruby-gemset
文件,该文件告诉 rails:“确保您以 rails 2.1.1
方式而不是 rails 5.0.0
方式:
#.ruby-gemset
rails_2_1_1
我想确定如果在应用程序的 Gemfile 中指定了另一个 rails 版本而不是在我的默认 gemset 中:那么在该应用程序中进行开发将在 rails 的上下文中进行所有操作Gemfile 中指定的版本与默认 gemset 中的 rails 版本相对。
您可以在项目文件夹中创建一个 .ruby-version
文件,RVM 会自动切换到正确的 Ruby。像这样:
$ echo '2.1.1' > .ruby-version
您只需要确保安装了该版本,例如:
$ rvm install ruby-2.1.1
您也可以在您的项目目录中创建 rvmrc 文件,然后它会自动切换 rvm
请按照流程创建 rvmrc 文件。
转到项目目录
rvm use 2.2.1@rails_2_1_1
rvm --rvmrc --create 2.2.1@rails_2_1_1
我想这对你有帮助。
首先,我建议不要使用 .ruby-gemset
文件,因为 Gemfile
已经有了你需要的一切。 .ruby-version
也已过时,因为 Ruby 版本也可以在 Gemfile
中指定:
source 'https://rubygems.org'
ruby '2.3.1'
gem 'rails', '~> 4.2.7'
...
现在关于 Rails 个版本。只要您 运行 使用 bundle exec
命令,这些命令的版本将与 Gemfile
中所述完全一致。
项目 bin/
文件夹中还有 binstubs
个脚本。它们是 运行 命令的最佳方式,因为它们通常会根据项目需要进行调整(例如 运行ning spring
以及您的命令)并且它们最终 运行 bundle exec
无论如何。
所以做事的正确方法是 运行 ./bin/rails
,这可能很乏味。这就是为什么我建议使用助手。例如,oh-my-zsh 项目有开箱即用的 rails
插件。前几行(阅读下面的解释):
function _rails_command () {
if [ -e "bin/rails" ]; then
bin/rails $@
elif [ -e "script/rails" ]; then
ruby script/rails $@
elif [ -e "script/server" ]; then
ruby script/$@
else
command rails $@
fi
}
function _rake_command () {
if [ -e "bin/rake" ]; then
bin/rake $@
elif type bundle &> /dev/null && [ -e "Gemfile" ]; then
bundle exec rake $@
else
command rake $@
fi
}
alias rails='_rails_command'
compdef _rails_command=rails
alias rake='_rake_command'
compdef _rake_command=rake
当您 运行 rails
时,此脚本会检查 bin/rails
是否存在(Rails 5 和 4 默认值)并将其改为 运行。如果不是,脚本会检查 script/rails
(Rails 3 默认值)和 script/server
(Rails 2 默认值)。所以基本上你已经涵盖了所有版本。 rake
也是如此。
有了这个插件,您再也不用担心额外的命令了。总是简单地 运行 rails
。您只需安装一次即可忘记它。
这不是 RVM 和 Rails 的问题。使用 Gemfile 是最好的方法,恕我直言!在您的 Gemfile 中,您可以指定要使用的 ruby 和 ruby 中的哪个 gemset。
设置默认值Ruby/Gemset -- 对于系统
首先,让我们为 5.0.0
上的系统设置 默认 ruby。这将允许任何 new/existing Rails 项目默认使用此 ruby 版本(除了那些用 Gemfile 覆盖的项目):
rvm use --default 5.0.0
..当然,如果您希望它固定到指定的 gemset:
rvm use --default 5.0.0@my_default_gemset
设置默认值 Ruby/Gemset -- 对于 Gemfile 上的 Rails 特定应用程序
示例 1
如果您想设置 rails 应用程序以利用 RVM gemset 2.2.1@rails_2_1_1
,类似于下面的 RVM 命令...
rvm use 2.2.1@rails_2_1_1
在您的 Gemfile 中,在 source
行的正下方指定以下两个注释行:
source 'https://rubygems.org'
#ruby=2.2.1
#ruby-gemset=rails_2_1_1
现在,当您 cd
进入您的 rails' 应用程序目录时,您应该会收到以下消息或类似消息:
RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does
that too, you can ignore these warnings with 'rvm rvmrc warning ignore
/my/rails/app/path/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore
allGemfiles'.
您可以仔细检查您的结果:
rvm list gemsets
ruby-2.2.1 [ x86_64 ]
ruby-2.2.1@global [ x86_64 ]
=> ruby-2.2.1@rails_2_1_1 [ x86_64 ]
ruby-5.0.0 [ x86_64 ]
ruby-5.0.0@global [ x86_64 ]
示例 2
使用 ruby-2.0.0-p247@rails-4.0.0
的另一个示例,示例 RVM 命令...
rvm use ruby-2.0.0-p247@rails-4.0.0
在您的 Gemfile 中,指定:
#ruby=2.0.0-p247
#ruby-gemset=rails-4.0.0
情况是我计算机上的默认 gemset 指向 rails 5.0.0
。但是:我有一个使用非常旧的 rails 版本的应用程序。对于这个例子,假设应用程序使用:rails 2.1.1
。
当 cd'ed
进入此应用程序时,我的机器是否会自动切换到 rails 2.1.1
,因为 Gemfile
中指定了 rails 2.1.1
?或者:我是否需要 明确地 创建一个 gemset 以便我的应用程序和我的机器做 "rails 2.1.1 way" 的事情(而不是以“rails 5.0.0 方式(我的默认 gemset 中的 rails 版本)做事?
我担心的是,如果我的机器认为我在应用程序内部开发时使用 rails 5.0.0
而不是 rails 2.1.1
:那么 rails 命令(例如生成器)可能会创建文件并执行stuff "the rails 5.0.0 way" 而不是 "rails 2.1.1" 方式。
希望这是有道理的。这是我要通过此应用程序使用 rails 2.1.1
示例:
我创建了一个 gemset,为任何使用 rails 2.1.1
rvm gemset create rails_2_1_1
我指定要在此 gemset 上使用的 ruby 版本
rvm use 2.2.1@rails_2_1_1
然后我将 rails 的旧版本安装到这个 gemset 上:
gem install rails --version=2.1.1
现在这个 gemset 使用 rails 2.1.1
。
现在,在我的应用程序的根目录中,我指定了一个 .ruby-gemset
文件,该文件告诉 rails:“确保您以 rails 2.1.1
方式而不是 rails 5.0.0
方式:
#.ruby-gemset
rails_2_1_1
我想确定如果在应用程序的 Gemfile 中指定了另一个 rails 版本而不是在我的默认 gemset 中:那么在该应用程序中进行开发将在 rails 的上下文中进行所有操作Gemfile 中指定的版本与默认 gemset 中的 rails 版本相对。
您可以在项目文件夹中创建一个 .ruby-version
文件,RVM 会自动切换到正确的 Ruby。像这样:
$ echo '2.1.1' > .ruby-version
您只需要确保安装了该版本,例如:
$ rvm install ruby-2.1.1
您也可以在您的项目目录中创建 rvmrc 文件,然后它会自动切换 rvm
请按照流程创建 rvmrc 文件。
转到项目目录
rvm use 2.2.1@rails_2_1_1
rvm --rvmrc --create 2.2.1@rails_2_1_1
我想这对你有帮助。
首先,我建议不要使用 .ruby-gemset
文件,因为 Gemfile
已经有了你需要的一切。 .ruby-version
也已过时,因为 Ruby 版本也可以在 Gemfile
中指定:
source 'https://rubygems.org'
ruby '2.3.1'
gem 'rails', '~> 4.2.7'
...
现在关于 Rails 个版本。只要您 运行 使用 bundle exec
命令,这些命令的版本将与 Gemfile
中所述完全一致。
项目 bin/
文件夹中还有 binstubs
个脚本。它们是 运行 命令的最佳方式,因为它们通常会根据项目需要进行调整(例如 运行ning spring
以及您的命令)并且它们最终 运行 bundle exec
无论如何。
所以做事的正确方法是 运行 ./bin/rails
,这可能很乏味。这就是为什么我建议使用助手。例如,oh-my-zsh 项目有开箱即用的 rails
插件。前几行(阅读下面的解释):
function _rails_command () {
if [ -e "bin/rails" ]; then
bin/rails $@
elif [ -e "script/rails" ]; then
ruby script/rails $@
elif [ -e "script/server" ]; then
ruby script/$@
else
command rails $@
fi
}
function _rake_command () {
if [ -e "bin/rake" ]; then
bin/rake $@
elif type bundle &> /dev/null && [ -e "Gemfile" ]; then
bundle exec rake $@
else
command rake $@
fi
}
alias rails='_rails_command'
compdef _rails_command=rails
alias rake='_rake_command'
compdef _rake_command=rake
当您 运行 rails
时,此脚本会检查 bin/rails
是否存在(Rails 5 和 4 默认值)并将其改为 运行。如果不是,脚本会检查 script/rails
(Rails 3 默认值)和 script/server
(Rails 2 默认值)。所以基本上你已经涵盖了所有版本。 rake
也是如此。
有了这个插件,您再也不用担心额外的命令了。总是简单地 运行 rails
。您只需安装一次即可忘记它。
这不是 RVM 和 Rails 的问题。使用 Gemfile 是最好的方法,恕我直言!在您的 Gemfile 中,您可以指定要使用的 ruby 和 ruby 中的哪个 gemset。
设置默认值Ruby/Gemset -- 对于系统
首先,让我们为 5.0.0
上的系统设置 默认 ruby。这将允许任何 new/existing Rails 项目默认使用此 ruby 版本(除了那些用 Gemfile 覆盖的项目):
rvm use --default 5.0.0
..当然,如果您希望它固定到指定的 gemset:
rvm use --default 5.0.0@my_default_gemset
设置默认值 Ruby/Gemset -- 对于 Gemfile 上的 Rails 特定应用程序
示例 1
如果您想设置 rails 应用程序以利用 RVM gemset 2.2.1@rails_2_1_1
,类似于下面的 RVM 命令...
rvm use 2.2.1@rails_2_1_1
在您的 Gemfile 中,在 source
行的正下方指定以下两个注释行:
source 'https://rubygems.org'
#ruby=2.2.1
#ruby-gemset=rails_2_1_1
现在,当您 cd
进入您的 rails' 应用程序目录时,您应该会收到以下消息或类似消息:
RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does
that too, you can ignore these warnings with 'rvm rvmrc warning ignore
/my/rails/app/path/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore
allGemfiles'.
您可以仔细检查您的结果:
rvm list gemsets
ruby-2.2.1 [ x86_64 ]
ruby-2.2.1@global [ x86_64 ]
=> ruby-2.2.1@rails_2_1_1 [ x86_64 ]
ruby-5.0.0 [ x86_64 ]
ruby-5.0.0@global [ x86_64 ]
示例 2
使用 ruby-2.0.0-p247@rails-4.0.0
的另一个示例,示例 RVM 命令...
rvm use ruby-2.0.0-p247@rails-4.0.0
在您的 Gemfile 中,指定:
#ruby=2.0.0-p247
#ruby-gemset=rails-4.0.0