[英]RVM switching Rails Versions
情况是我的计算机上的默认gemset指向rails 5.0.0
。 但是:我有一个使用非常古老的rails版本的应用程序。 让我们说这个例子的应用程序使用: rails 2.1.1
。
难道我的机器自动切换到rails 2.1.1
当cd'ed
进入这个程序,因为rails 2.1.1
在指定Gemfile
? 或者:我是否需要显式创建一个gemset,以便我的应用程序和我的机器以“rails 2.1.1方式”执行操作(而不是执行“rails 5.0.0方式,这是我的默认情况下的rails版本”宝石)?
我担心的是,也许如果我的机器认为我在应用程序内部开发时使用rails 5.0.0
而不是rails 2.1.1
:那么诸如生成器之类的rails命令可能会创建文件并执行“rails 5.0.0 way”而不是以“rails 2.1.1”的方式。
希望这是有道理的。 以下是我将通过Gemset“明确”声明此应用程序使用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
。
现在在我的应用程序的根目录中,我指定了一个告诉rails的.ruby-gemset
文件:“确保你正在使用rails 2.1.1
方式而不是rails 5.0.0
方式:
#.ruby-gemset
rails_2_1_1
我想确定如果在应用程序的Gemfile中指定了另一个rails版本而不是我的默认gemset:那么在该应用程序内开发将在Gemfile中指定的rails版本的上下文中执行所有操作,而不是在默认宝石。
这不是RVM和Rails的问题。 使用Gemfile是最好的方法,恕我直言! 在Gemfile中,您可以指定要使用哪个ruby和哪个gemset。
首先,让我们在5.0.0
上为系统建立默认的 ruby。 这将允许任何新的/现有的Rails项目默认为此ruby版本(除了那些用Gemfile覆盖的项目):
rvm use --default 5.0.0
..当然,如果你想将它固定到指定的gemset:
rvm use --default 5.0.0@my_default_gemset
如果您想设置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的应用程序目录,您会收到以下消息,或similiar:
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 ]
使用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
您还可以将rvmrc文件创建到项目目录中,然后它将自动切换rvm
请按照该过程创建rvmrc文件。
转到项目目录
rvm use 2.2.1@rails_2_1_1
rvm --rvmrc --create 2.2.1@rails_2_1_1
我认为这会对你有所帮助。
您可以在项目的文件夹中创建.ruby-version
文件,RVM将自动切换到正确的Ruby。 像这样的东西:
$ echo '2.1.1' > .ruby-version
您只需要确保安装了该版本,例如:
$ rvm install ruby-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
说明进行Gemfile
。
项目bin/
文件夹中还有binstubs
脚本。 它们是运行命令的最佳方式,因为它们通常会针对项目需求进行调整(例如,随着命令运行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
。 你只需安装一次而忘记它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.