【发布时间】:2016-07-13 14:29:52
【问题描述】:
情况是我计算机上的默认 gemset 指向rails 5.0.0。但是:我有一个使用非常旧的 rails 版本的应用程序。假设此示例应用程序使用:rails 2.1.1。
由于Gemfile 中指定了rails 2.1.1,当cd'ed 进入此应用程序时,我的机器是否会自动切换到rails 2.1.1?或者:我是否需要显式创建一个 gemset 以便我的应用和我的机器以“rails 2.1.1 方式”做事(而不是做事“rails 5.0.0 方式是我默认 gemset 中的 rails 版本)?
我担心的是,如果我的机器认为我在应用程序内部开发时使用rails 5.0.0 而不是rails 2.1.1:那么生成器等rails 命令可能会创建文件并执行“rails 5.0.0 方式”作为反对“rails 2.1.1”的方式。
希望这是有道理的。为了通过 Gemset “明确”声明此应用程序使用 rails 2.1.1
示例:
我为使用rails 2.1.1的任何应用程序创建了一个gemset
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 中指定:那么在该应用程序中开发将在 Gemfile 中指定的 rails 版本的上下文中执行所有操作,而不是 rails默认 gemset 中的版本。
【问题讨论】:
-
你在使用 Bundler 吗?如果没有,您可以将 Bundler 添加到项目中吗?这将整齐地解决这个问题。
-
@Jordan 我正在使用 Bundler。每次我
cd进入这个应用程序时,我是否需要确保我运行bundle?或者:只是第一次为了生成Gemfile.lock然后我不再需要这样做? -
您只需运行一次
bundle,除非您切换到不同的 Ruby 版本(即使那样,如果您切换 back,您也不必运行bundle再次)。如果您使用 Bundler,我认为您不需要为 gemsets 烦恼。只要您使用bundle exec,它将使用Bundler 安装的Rails 版本(即Gemfile 中的版本)。以下是有关在 RVM 中使用 Bundler 的更多信息:rvm.io/integration/bundler -
P.S.我不知道 Rails 2.1 是否有这个命令,但Rails 2.3 command line guide mentions
./script/about会打印当前的 Ruby 和 Rails 版本。试试bundle exec ./script/about看看会发生什么。 -
如果您正确设置了 .ruby-version 和 .ruby-gemset,只需 cd'ing 进入项目目录就可以使用这些东西...
标签: ruby-on-rails ruby rvm bundler