[英]clarification on rvm and switching between rails
在http://railsapps.github.io/installrubyonrails-mac.html之后 ,我遇到以下命令
rvm use ruby-2.1.3@rails4.1 --create
gem install rails # installs the latest rails version
rails -v # returns 4.1.6
但是,我也可以执行以下操作,将Rails版本添加到4.0.8
rvm use ruby-2.1.3@rails4.0 --create
gem install rails --version=4.0.8 # installs the latest rails version
rails -v # returns 4.0.8
这有什么意义呢? 在本文中的某个地方,有人说这种方法是为了防止全局gem-set,而是根据项目特定的gemset安装rails? 那有什么意思?
这是有关如何创建新的Rails项目的说明
$ mkdir myapp
$ cd myapp
$ rvm use ruby-2.1.3@myapp --ruby-version --create
$ gem install rails
$ rails new .
为什么不只将Rails称为myapp? 文字说这是“创建特定于项目的gemset”,但我不知道这是什么意思。 这不是只安装Rails 4.1.6(最新版本)吗? 为什么不首先在全球范围内安装Rails 4.1.6?
想象一下,您是一家在过去四年中一直在开发Rails应用程序的公司中的Rails开发人员。 您在Rails 2,Rails 3,Rails 4上都有应用程序-随着新版本的发布,您升级了工具集,因为为什么不呢? 每个新版本都更好。
但是,它们不向下兼容。 Rails 2应用程序不适用于Rails 4.1。 如果在骇入Rails 4 one时被要求紧急调试Rails 2应用怎么办? 卸载全局Rails,安装Rails 2,进行破解,然后卸载Rails 2并再次重新安装新的Rails,只是为了您可以运行测试以解决一站式错误?
这就是使用gemset的地方。每个应用程序都有环境,因此每个应用程序都可以自足运行,而不会发生版本冲突。
如果您不希望在计算机上出现这种版本冲突的情况(即,如果您只能想象在一个项目上工作),那么gemset是完全不相关的。
经过一番迷惑之后仍在编辑中:)让我们一步一步走,看看到底发生了什么。
$ mkdir myapp
$ cd myapp
您现在位于空目录中。
$ rvm use ruby-2.1.3@myapp --ruby-version --create
rvm创建一个新的宝石集,名为ruby-2.1.3@myapp
,它将与Ruby 2.1.3一起运行。 因此,您将在~/.rvm/gems/ruby-2.1.3@myapp
一个新目录,该目录将位于您的gemset。 在先前为空的myapp
目录中,您还有两个新文件: .ruby-version
(包含一行,表示ruby-2.1.3
)和.ruby-version
(包含行myapp
)。 每次您进入myapp
目录时, rvm
都会读取这两行:它为您设置了当前的Ruby和gemset。
$ gem install rails
认识到当前的gemset现在是ruby-2.1.3@myapp
, gem install
命令将下载最新的rails
gem及其所有依赖项,并将它们放在您的gemset目录中( ~/.rvm/gems/ruby-2.1.3@myapp/
)。
$ get install rails --version=4.0.8
如果您尝试这种方法,它将忠实地安装Rails 4.0.8,但是由于您的gemset中有较新的版本,并且您的应用程序没有特别的要求,因此以新版本为准。 这通常不是您想要的; 而且无论如何,很少有理由开发一个项目以符合两个不同版本的库(除非您要开发一个库或一个插件;这是另外一回事)。
$ rails new .
rails
实际上正在执行~/.rvm/gems/ruby-2.1.3@myapp/bin/rails
。 如果您不在myapp
目录中(链接到gemset),则该命令将失败(如果未在全局环境中安装Rails),或者将执行已全局安装的Rails(如果已安装)。
因此,实际上并不是在同一项目中同时具有两个版本的Rails。 但是,当您使用另一个gemset创建另一个项目(例如ruby-2.1.3@myotherapp
)时,在那里可能会使用其他版本的Rails。 该版本自动的改变只是根据你的目录上cd
到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.