Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使gem install命令仅在未安装或需要更新时安装_Ruby_Gem - Fatal编程技术网

Ruby 如何使gem install命令仅在未安装或需要更新时安装

Ruby 如何使gem install命令仅在未安装或需要更新时安装,ruby,gem,Ruby,Gem,我已经阅读了rubygems站点的文档,但我猜“gem install”命令总是重新安装、重新编译所有内容,即使已经安装了相同的版本 如何使gem install命令仅在需要时安装?您可能需要使用一些外部命令,如来处理项目的gem安装 如果您必须直接使用rubygems进行此操作,则可以使用如下命令 ruby -e "puts `gem install GEMTOINSTALL` if(`gem list --no-versions | grep GEMTOINSTALL`) == ''" 我

我已经阅读了rubygems站点的文档,但我猜“gem install”命令总是重新安装、重新编译所有内容,即使已经安装了相同的版本


如何使gem install命令仅在需要时安装?

您可能需要使用一些外部命令,如来处理项目的gem安装

如果您必须直接使用rubygems进行此操作,则可以使用如下命令

ruby -e "puts `gem install GEMTOINSTALL` if(`gem list --no-versions | grep GEMTOINSTALL`) == ''"

我会做的

这就是我们使用
捆绑安装的原因。此命令将查看gems的
gemfile

这个文件说明了一些事情。首先,它说bundler应该查找gem文件中声明的gem。您可以声明多个Rubygems源,bundler将按照您声明源的顺序查找gems

Bundler将连接到
rubygems.org
(以及您声明的任何其他来源),并找到满足您指定要求的所有必需gem的列表。由于
Gemfile
中的所有gem都有自己的依赖项(其中一些有自己的依赖项),因此在
Gemfile
上运行
bundle install
将安装相当多的gem

如果已经安装了所需的任何gem,
Bundler
将使用它们。在将任何需要的gems安装到您的系统后,bundler会将所有gems及其安装版本的快照写入
Gemfile.lock

当您运行
bundle install
时,bundler将(默认情况下)将您的gems安装到您的系统gems存储库中。这意味着它们将出现在
gem列表中。此外,如果您正在开发多个应用程序,则无需为每个应用程序下载和安装通用的gems。这对于开发来说很好,但是对于部署来说有些问题

在部署方案中,与您一起部署的Unix用户可能无权将gems安装到系统位置。即使用户使用(或您使用sudo),引导应用程序的用户也可能无法访问它们

因此,bundler附带了一个
--deployment
标志,它封装了在部署环境中使用bundler的最佳实践

--deployment
标志需要一个最新的
Gemfile.lock
,以确保您所做的测试(在开发和阶段)实际反映了您投入生产的代码。您可以在部署应用程序之前运行
bundle check
,以确保您的
Gemfile.lock
是最新的。请注意,如果自上次更改
Gemfile
以来已运行
bundle install
,并成功启动了应用程序(或运行了测试),则它将始终是最新的

看起来,
--conservative
标志将使gem命令执行您想要的操作

gem install rake --conservative
从文档
gem安装--help

--不要试图升级已经满足版本要求的gems


这并不能直接回答您的问题,但Bundler会为您解决这个问题,并提供依赖关系管理:您仍然需要安装/更新Bundler。可能使用类似于:
gem安装bundler——保守的