如何“激活”特定 gem 的不同版本?

Posted

技术标签:

【中文标题】如何“激活”特定 gem 的不同版本?【英文标题】:How do I "activate" a different version of a particular gem? 【发布时间】:2011-05-21 08:42:41 【问题描述】:

我想在 rails 2.3.10 作为我的操作系统的“活动”gem 之间切换,以便我可以在命令行中调用它。

可以这样做吗?我没有使用 rvm。也许是时候开始了。

我尝试了gem install rails --version=2.3.10,但这只是确保安装了该版本的gem,它没有将它放入/usr/bin/rails

(我已经在我的应用程序中使用了 bundler ——但直到现在还不需要在操作系统级别对 gem 进行任何精确控制)

【问题讨论】:

【参考方案1】:

编辑:刚刚看到您在帖子中提到的 RVM。绝对是要走的路。

你会想要安装RVM——这是一个很棒的包,可以让你在同一台机器上管理不同的 Ruby 和不同的 gem 集。您可以轻松地来回切换。

这是安装指南:http://rvm.beginrescueend.com/rvm/install/

一切就绪后,您可以在命令行中使用rvm list 查看所有已安装的ruby,并使用rvm use ruby-head 进行切换。 RVM 将每个红宝石上的宝石分开,这应该有助于解决您的问题。

【讨论】:

【参考方案2】:

您可以使用RVM

然后你也可以在之后使用Bundler,它可以很好地管理gem依赖。

在你的Gemfile

gem "rails", "2.3.10"

在您的应用程序中

require 'rubygems'
require 'bundler/setup'

你就完成了。

【讨论】:

除此之外,如果您希望某些脚本仅“看到”您的 Gemfile 中声明的版本,请将它们作为“bundle exec ”运行,例如bundle exec warble【参考方案3】:

如果您的问题是运行某个版本的二进制文件,那么:

rails --version # => the latest version
rails _2.3.10_ --version # => Rails 2.3.10

此模式 (gem-binary _gem-version_) 适用于任何 gem 二进制文件。

希望对你有帮助。

【讨论】:

哦,这让我在办公室度过了一个漫长的周末,谢谢! 这似乎并不适用于所有人:rackup _1.4.3_ --versionRack 1.1 (Release: 1.4) rackup 仅打印发布版本(参见 Rack.versionRack.release github.com/rack/rack/blob/master/lib/rack.rb)。试试gem install rack --version=1.3 && rackup _1.3.0_ --version,它会打印出Rack 1.1 (Release: 1.3) 以防万一,它是这样工作的:which rackup | xargs cat【参考方案4】:

使用 RVM

RVM 允许您管理不同版本的 Ruby 和 Gems。您可以使用例如安装一个 ruby​​ 版本

rvm install 1.9.2

然后您可以使用它:

rvm use 1.9.2

通过 gemsets 在每个项目的基础上使用特定的 gem。

如果你想要更多的命名空间,你可以设置 gemsets;包含特定项目的特定 gem 的目录。

rvm gemset create myproject

那么你可以像这样使用它们:

rvm use 1.9.2@myproject

自动化

要自动执行 Gem 切换过程,请在项目根目录中弹出 .ruby-version.ruby-gemset 文件。弹出 Ruby 的版本和你想在其中使用的 gemset 的名称,当你 cd 进入项目目录时,RVM 会选择正确的 gemset。

将 gem 安装到 gemset 中

如果您正在使用它,请使用 bundler 以通常的方式将您的 gem 安装到您的 gemset 中:

bundle install

或者只是使用普通的旧的:

gem install mygem

宝石将放入正确的宝石组中。

RVM 替代品

您可能还想查看 rbenv,它可以完成类似的工作。

【讨论】:

rvm 的问题是(正如您所提到的)它处理 ruby​​ 版本和 gem 版本。 rbenv 只处理 ruby​​ 版本,让 bundler 处理 gem 版本。

以上是关于如何“激活”特定 gem 的不同版本?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby:如何安装特定版本的 ruby​​ gem?

运行不同版本的rails gems

如何使用不同版本的 ruby​​ 但使用相同的 gemset?

对于内部依赖特定版本的不同包,如何管理项目中多个版本的 npm 模块?

在特定版本中安装ruby gem

如何从 github 获取 gem 的特定“提交”?