Ruby:如何安装特定版本的 ruby gem?
Posted
技术标签:
【中文标题】Ruby:如何安装特定版本的 ruby gem?【英文标题】:Ruby: How to install a specific version of a ruby gem? 【发布时间】:2013-06-06 06:14:17 【问题描述】:使用命令行gem
工具,我如何安装特定版本的gem?
【问题讨论】:
【参考方案1】:使用--version
参数(快捷方式-v
):
$ gem install rails -v 0.14.1
…
Successfully installed rails-0.14.1
您还可以使用版本比较器,例如 >=
或 ~>
$ gem install rails -v '~> 0.14.0'
…
Successfully installed rails-0.14.4
使用较新版本的 rubygems,您可以加强您的要求:
$ gem install rails -v '~> 0.14.0, < 0.14.4'
…
Successfully installed rails-0.14.3
从现在开始,您还可以指定多个 gem 的版本:
$ gem install rails:0.14.4 rubyzip:'< 1'
…
Successfully installed rails-0.14.4
Successfully installed rubyzip-0.9.9
但这不适用于每个宝石超过一个比较器(目前)。
【讨论】:
这对 ~> 有效,但如果你有 '= 0.7' 类型的情况呢?我尝试应用两个 v 参数,看起来好像第一个被忽略了。使用逗号分隔符甚至不会解析。我最终删除了大于要求,它恰好安装了一个可接受的版本,但有一个正式的解决方案会很好。 版本比较器~>
代表什么?
表示允许最后一位增长(***.com/questions/5170547/…)
Mael Stor 的回答告诉我们,Joseph Coco 六年前提出的两个 v 参数现在有效。【参考方案2】:
您可以使用-v
或--version
标志。例如
gem install bitclock -v '< 0.0.2'
要指定版本上限和下限,您可以指定 --version
标志两次
gem install bitclock -v '>= 0.0.1' -v '< 0.0.2'
或使用语法(例如)
gem install bitclock -v '>= 0.0.1, < 0.0.2'
另一种方法是
gem install bitclock:'>= 0.0.1'
但使用最后一个选项,无法同时指定上限和下限。
[gem 3.0.3 和 ruby 2.6.6]
【讨论】:
如何使 gem 不升级依赖项,gem install "asciidoctor:2.0.10" "asciidoctor-diagram:2.0.5"
,总是将 asciidoctor 升级到高于 2.0.10 的版本,我尝试使用选项 @987654329 @ 和 --conservative
?我用gem install --no-document --ignore-dependencies "asciidoctor-diagram:2.0.5"
解决了这个问题,但asciidoctor-diagram
只有一个dep,如何更优雅地处理它。
@Brice 我无法使用命令行gem install 'asciidoctor:2.0.10' 'asciidoctor-diagram:2.0.5'
重现此行为。它安装的正是这些版本。输入 gem --version
时会报告哪个 gem 版本?
它发生在gem
3.1.4 中,在registry.fedoraproject.org/fedora-minimal
图像中。使用此命令,例如docker run -it --rm registry.fedoraproject.org/fedora-minimal bash -c "microdnf install -y ruby; gem install 'asciidoctor:2.0.10' 'asciidoctor-diagram:2.0.5'"
,我看到首先安装了 asciidoctor 2.0.10,然后安装了 asciidoctor 2.0.12。【参考方案3】:
对于 Ruby 1.9+,使用冒号。
gem install sinatra:1.4.4 prawn:0.13.0
【讨论】:
您要安装什么 gem(以及什么版本)? 请告诉我gem sources
的输出,如果它是空的,使用这个命令添加一个repo:gem sources -a https://rubygems.org/
我的gem -v
显示1.8.23
与您的2.2.2
。看起来这个功能是新的:)
Ruby 1.8 已经终止支持ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7【参考方案4】:
用于安装
gem install gemname -v versionnumber
用于卸载
gem uninstall gemname -v versionnumber
【讨论】:
【参考方案5】:正如其他人所指出的,通常将-v
标志用于gem install
命令。
如果您在本地开发宝石,则在从 gemspec 中切割出宝石后:
$ gem install gemname-version.gem
假设版本为 0.8,它看起来像这样:
$ gem install gemname-0.8.gem
【讨论】:
很好的答案。我建议您为标志“-v”选项添加另一个代码块。当我的眼睛阅读答案时,他们立即转到代码块而不是围绕它的文本。如果其他人也这样做,他们会错过“-v”部分。【参考方案6】:Linux
要安装不同版本的ruby,请使用apt
检查最新版本的软件包,如下所示:
$ apt-cache madison ruby
ruby | 1:1.9.3 | http://ftp.uk.debian.org/debian/ wheezy/main amd64 Packages
ruby | 4.5 | http://ftp.uk.debian.org/debian/ squeeze/main amd64 Packages
然后安装它:
$ sudo apt-get install ruby=1:1.9.3
要检查当前版本是什么,请运行:
$ gem --version # Check for the current user.
$ sudo gem --version # Check globally.
如果版本仍然旧,您可以尝试使用 ruby 版本管理器 (rvm
) 将版本切换到新版本:
rvm 1.9.3
注意:如果rvm
已全局安装,您可以在其前面加上sudo
。或者,如果您的命令 rvm
不在您的全局 PATH
中,则运行 /usr/local/rvm/scripts/rvm
。如果 rvm 安装过程失败,请参阅故障排除部分。
疑难解答:
如果您还有旧版本,您可以尝试通过以下方式安装 rvm(ruby 版本管理器):
sudo apt-get install curl # Install curl first
curl -sSL https://get.rvm.io | bash -s stable --ruby # Install only for the user.
#or:# curl -sSL https://get.rvm.io | sudo bash -s stable --ruby # Install globally.
然后如果安装在本地(仅适用于当前用户),则通过以下方式加载 rvm:
source /usr/local/rvm/scripts/rvm; rvm 1.9.3
如果全局(针对所有用户),则:
sudo bash -c "source /usr/local/rvm/scripts/rvm; rvm 1.9.3"
如果您对新的 ruby 版本仍有问题,请尝试通过 rvm 安装它:
source /usr/local/rvm/scripts/rvm && rvm install ruby-1.9.3 # Locally.
sudo bash -c "source /usr/local/rvm/scripts/rvm && rvm install ruby-1.9.3" # Globally.
如果你想全局安装一些 gems 并且你已经安装了 rvm,你可以试试:
rvmsudo gem install [gemname]
代替:
gem install [gemname] # or:
sudo gem install [gemname]
注意:最好不要使用 sudo 来处理 RVM gem。当你这样做 sudo 您正在以 root 身份运行命令,另一个 shell 中的另一个用户 因此,RVM 为您完成的所有设置都将被忽略,而 该命令在 sudo 下运行(例如 GEM_HOME 等...)。所以要 重申一下,一旦你“sudo”,你就作为根系统运行 将清除您的环境及其任何文件的用户 您的用户无法修改创建,这将导致 奇怪的事情发生了。
【讨论】:
【参考方案7】:使用-v
标志:
$ gem install fog -v 1.8
【讨论】:
如果像我一样,您以前安装过更高版本的 gem,那么您必须卸载更高版本,例如gem uninstall fog
。如果您有多个版本,它会询问您要卸载哪个版本。
我有 3 个版本的 rake:gem list | grep rake
= rake (10.1.1, 10.1.0, 0.8.7)
.. 我有一个 rails 2.3.5 项目和另一个我正在同时开发的 3.0 项目.. 怎么样我为每个项目使用特定版本的 rake(即在命令行上?)
@abbood rake _10.1.1_ ...
应该工作,谁想知道 :)
值得注意的是,这似乎不会影响可执行的二进制文件。不过,卸载以前的版本适用于二进制文件。
我可能每年搜索一次并找到它,哈哈,这就是我使用它的频率,但很棒!以上是关于Ruby:如何安装特定版本的 ruby gem?的主要内容,如果未能解决你的问题,请参考以下文章