如何“激活”特定宝石的其他版本?


85

我想在Rails 2.3.10之间切换,将其作为OS的“活动” gem,以便可以在命令行中调用它。

是否有可能做到这一点?我没有使用rvm。也许是时候开始了。

我试过了gem install rails --version=2.3.10,但这只是确保已安装gem的版本,而没有将它放在中/usr/bin/rails

(我已经为我的应用程序使用了捆绑程序-但到目前为止,在操作系统级别上不需要对gems进行任何精确控制)

Answers:


154

如果您的问题是运行特定版本的二进制文件,则:

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

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

希望能帮助到你。


1
哦,这为我节省了一个漫长的办公室周末,谢谢!
Lachlan McD。

2
这似乎并不适用于所有人:rackup _1.4.3_ --version<br> Rack 1.1 (Release: 1.4)
Chloe 2013年

1
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)
Daniel Vartanov 2013年

以防万一,它是这样工作的:which rackup | xargs cat
Daniel Vartanov 2013年

感谢Daniel非常有用
路线

12

使用RVM

RVM允许您管理Ruby和Gems的不同版本。您可以使用以下版本安装ruby版本:

rvm install 1.9.2

然后,您可以使用:

rvm use 1.9.2

在每个项目的基础上,将特定的宝石与宝石集一起使用。

如果您想进一步命名,可以设置gemsets。目录将包含特定项目的特定gem。

rvm gemset create myproject

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

rvm use 1.9.2@myproject

自动化

要自动化切换宝石的过程,请在项目根目录中弹出.ruby-version.ruby-gemset文件。弹出Ruby的版本以及要在其中使用的gemset的名称,当您进入项目目录时,RVM将选择正确的gemset。

将宝石安装到宝石集中

如果使用宝石,请使用捆绑器以通常的方式将宝石安装到宝石集中:

bundle install

或仅使用常规旧版:

gem install mygem

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

RVM替代品

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


1
就像您提到的那样,rvm的问题是它可以处理ruby版本和gem版本。rbenv只处理ruby版本,而让bundler处理gem版本。
daslicious

7

您可以使用RVM

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

在你的 Gemfile

gem "rails", "2.3.10"

并在您的应用程序中

require 'rubygems'
require 'bundler/setup'

到此为止。


除此之外,如果您希望某些脚本仅“查看”您的Gemfile中声明的版本,请以“ bundle exec <脚本名称>”运行它们,例如bundle exec warble
rustyx 2012年

3

编辑:刚刚看到您的RVM在帖子中提到。肯定要走的路。

您将要安装RVM-这是一个了不起的软件包,它将使您可以在同一台计算机上管理不同的Ruby和不同的gem组。您可以轻松地来回切换。

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

一切就绪后,您可以在命令行中使用 rvm listrvm use ruby-head,例如,使用进行切换。RVM将每个红宝石上的宝石分开,这将有助于解决您的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.