繁体   English   中英

RVM切换Rails版本

[英]RVM switching Rails Versions

情况是我的计算机上的默认gemset指向rails 5.0.0 但是:我有一个使用非常古老的rails版本的应用程序。 让我们说这个例子的应用程序使用: rails 2.1.1

难道我的机器自动切换到rails 2.1.1cd'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。

设置默认的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

在Gemfile上设置默认的Ruby / Gemset - 用于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的应用程序目录,您会收到以下消息,或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 ]

例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

您还可以将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM