我想在不运行安装包的情况下获得Gem的版本。 这就是说,我想弄清楚计划在不实际安装gem的情况下安装哪个版本的软件包。 说从合并的Gemfile.lock(和Gemfile)中读取它。
有什么办法可以解决我计划安装的版本捆绑程序?
我需要这个,因为我想在运行docker build时缓存昂贵的安装。
像rails(nokogiri)这样的宝石需要花费一些时间来安装,我想在运行捆绑安装之前的上一步中进行gem install rails -v...。
为此,我需要先获得rails版本
答案 0 :(得分:1)
如果您将新的gem添加到gemfile中,但不执行bundle install
,则它尚未安装。相反,您可以运行bundle lock
,它会生成一个新的锁定文件。这包括将要安装的新gem的gem版本。
通过运行bundle show new_gem
,它表明它实际上没有安装。
尽管可以确保在运行命令之前获得原始Gemfile.lock
的备份。
答案 1 :(得分:1)
默认情况下,如果Gemfile中未指定任何版本,运行bundle install
将尝试安装与您项目中其余gem和ruby版本兼容的gem的最新版本。如果尚不存在,这将创建一个Gemfile.lock文件。如果已经将Gemfile.lock文件提交给git repo,则应安装Gemfile.lock中指定的版本。捆绑程序的要点是处理依赖关系,以确保您的堆栈正常工作。
要查看当前使用的宝石捆绑包的版本,可以运行
bundle show rails
例如,您可能需要在Gemfile中指定红宝石版本
ruby '~> 2.5' #
您可以像这样在Gemfile中指定gem的确切版本,只要它与堆栈的其余部分兼容,您应该可以依靠该版本来安装版本捆绑程序。如果存在不兼容的gem版本,bundle install
将引发错误。
gem 'rails', '4.2.11' # this will always install only this version.
您还可以使用悲观运算符(~>)
设置仅进行次要更新
gem 'influxdb', '~> 0.6.1' # could go to 0.6.2 but never 0.7.0
您也可以设置最低版本,尽管这可能不是您所需要的版本。
gem 'pg_query', '>= 0.9.0'
如果您的存储库中已经有一个Gemfile.lock,则可以通过运行以下命令查看要安装的版本:
gem show rails
哪个会显示您的版本,以及是否安装了当前版本。
有关更多信息,请参见bundle --help