【问题标题】:How do you use multiple rails versions with rbenv?如何在 rbenv 中使用多个 Rails 版本?
【发布时间】:2012-02-11 06:17:25
【问题描述】:

是否可以使用 rbenv 使用多个版本的 rails(例如 2.3 和 3.1)?使用 rvm 中的 gemsets 很容易,但我想知道现在我已经切换到 rbenv 最好的方法是什么(另外,我正在寻找一种没有 rbenv-gemset 的方法)。

【问题讨论】:

标签: ruby-on-rails rbenv


【解决方案1】:

不确定您是否对此有答案,但我想我会提供我所做的并且它似乎有效。

因此,一旦您安装了 rbenv,并使用它来安装特定的 ruby​​ 版本,您就可以为该 ruby​​ 安装多个版本的 rails。

步骤 1. 为每个 ruby​​ 版本安装所需的任何版本的 rails

% RBENV_VERSION=1.9.2-p290 rbenv exec gem install rails --version 3.0.11

通过在命令行中使用“RBENV_VERSION=1.9.2-p290”前缀,您可以指定应该关注哪个 ruby​​ rbenv。

然后使用“rbenv exec”命令,您可以安装rails。只需使用示例中的版本标志来指定您想要的版本。不确定您是否可以一次安装多个版本,但我只是根据需要多次运行此命令来安装我想要的每个版本。

注意:这一切都将在您的 rbenv 目录中进行管理,因此它非常安全且包含在内。

步骤 2. 通过指定所需的 rails 版本来构建一个新的 rails 项目。

% RBENV_VERSION=1.9.2-p290 rbenv exec rails _3.0.11_ new my_project

第 3 步。不要忘记进入该项目并设置本地 rbenv ruby​​ 版本。

% cd my_project
% rbenv local 1.9.2-p290

现在如果你想删除这个项目,照常删除即可。

如果您想从 rbenv gems 中删除/管理 rails 版本,您可以使用常规 gem 命令,只需在命令行前加上:

% RBENV_VERSION=1.9.2-p290 rbenv exec gem {some command}

当然,您可以很容易地删除在 rbenv 中管理的完整 ruby​​ 版本及其所有 shims 等。我喜欢自给自足的一切。

希望这会有所帮助。

作为参考,这是对至少其中一些内容的一个很好的介绍:

http://ascarter.net/2011/09/25/modern-ruby-development.html

【讨论】:

  • 感谢您的回答,但我想知道您不能只创建 rails 项目并在项目中指定 rails 版本,然后进行捆绑安装吗?您能解释一下您的答案将如何成为更好的解决方案吗?我没有那么有经验,所以知道会有所帮助。谢谢
  • 顺便说一句,一旦您创建了具有该前缀的项目,您是否对您在项目中执行的每个命令都使用该前缀?前缀+捆绑安装?前缀 + gem install {gem name} 等?
  • 不,您不需要继续使用前缀。我在这里的回答有点多余,因为 RVM 是一个完整的包管理器(ruby + rails 版本),我试图说明一种使用 rbenv 做类似事情的方法,与 RVM 不同的是,它主要是一个 ruby​​ 管理器。 OP 询问是否将多个 rails 版本与 rbenv 一起使用,所以我在描述如何将特定的 rails 版本安装到特定的 ruby​​ 版本(您可以安装多个),然后在使用该 ruby​​ 创建项目时选择要使用的版本版本。这会给你类似于 RVM 的东西。
  • 至于安装默认值,然后在 Gemfile 中更改它......我想你可以这样做。在我看来,跨 Rails 版本的配置和其他设置变化很大,以至于指定要安装的版本看起来更简洁(假设您首先需要对版本大惊小怪)。
  • 第 1 步对我不起作用,我得到了以下内容。错误:安装rails时出错:rails中的“rails”与railties中安装的可执行文件冲突
【解决方案2】:

有一个名为 rbenv-gemset 的 rbenv 插件,它的行为应该类似于 rvm gemset-command,但由于 rbenv 从未打算以这种方式工作,所以我没有尝试过。

我通常使用 Bundler 管理 Rails 版本,正如 Nathan 在其他答案之一的 cmets 中所建议的那样。我用我想要的 Rails 版本创建了一个 Gemfile,运行 bundle install,创建 Rails 应用程序,让它替换 Gemfile 并让 Bundler 接管:

mkdir my-rails-app
cd my-rails-app
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '3.2.17'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle
bundle update

如果你想了解更多细节,我写了an article on my blog

希望对你有帮助!

【讨论】:

  • 那是一篇不错的文章。感谢捆绑器
  • 那是我正在寻找的解决方案 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2016-10-02
相关资源
最近更新 更多