如何“激活”特定 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 execbundle exec warble
如果您的问题是运行某个版本的二进制文件,那么:
rails --version # => the latest version
rails _2.3.10_ --version # => Rails 2.3.10
此模式 (gem-binary _gem-version_
) 适用于任何 gem 二进制文件。
希望对你有帮助。
【讨论】:
哦,这让我在办公室度过了一个漫长的周末,谢谢! 这似乎并不适用于所有人:rackup _1.4.3_ --version
Rack 1.1 (Release: 1.4)
rackup 仅打印发布版本(参见 Rack.version
和 Rack.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 但使用相同的 gemset?