Bundler

Bundler - gems管理器,类比cocopods

简介

Ruby Project依赖于一系列的ruby gems.而bundler是一个很好的管理ruby项目gems的工具。当然也是一个ruby gem.

使用bundler可以为你的ruby project提供统一的构建环境(无论是production, development, 还是staging),因为bunder可以很好的跟踪和安装指定的和预期的gem.

Bundler 能够跟踪并安装所需的特定版本的 gem,以此来为 Ruby 项目提供一致的运行环境。

Bundler 是 Ruby 依赖管理的一根救命稻草,它可以保证你所要依赖的 gem 如你所愿地出现 在开发、测试和生产环境中。 利用 Bundler 启动项目简单到只用一条命令:bundle install。

试验:

  1. 安装ruby gem

前提:试验环境中已存在ruby和rubygem

image

  1. 使用bundler安装gem

1). 在ruby project的根目录下写Gemfile

image

2). 安装gems 

和你的Gemfile同级目录运行’bundle install --verbose‘,可以看到整个安装过程。bundler根据你指定的gem源查找相应的version,并进行安装。

再次运行'bundle install', 则bunlder会检测是否已安装相应的Gem包,如果已经安装,则直接using否则进行安装,第一次安装完成后, bundler保存当前的gems的快照到Gemfile.lock

remote, platforms, dependencies, build with 字段的意思很好理解,这里不再复述。

另外,Gemfile.lock中specs中的gems之间层级关系很简单,就是gem及其下属依赖。

从下往上读Gemfile.lock,可发现,最底层依赖的包在最下面。

而specs则是gems依赖关系、版本信息的明细清单。

3) 验证Gemfile.lock的工作原理

copy这个ruby project到另一个host下(ruby, rubygem已安装),运行bundle install

对比图'install gems',可以看出,安装的gems完全一致

即, bundle install在存在Gemfile.lock的情况下,依据Gemfile.lock进行安装。如果没有Gemfile.lock则会根据Gemfile进行安装,并生成Gemfile.lock.

是,Gemfile.lock就是简介中所说的gems快照。而不同环境间一致的部署就是依赖Gemfile.lock而实现的。

  1. upgrade gems
  1. 更新现有的gem包的版本至高版本(而非latest)

编辑Gemfile中gem的version, 然后运行bundle install, 则Gemfile.lock会自动更新

我们可以看到,我们更新了rake gem到高一些的版本

  1. 更新没有指定版本的gem到latest版本,则运行bundle update gem

如果不指定gem, bundle update 则会更新所有满足条件的gem到最新版本。

posted on 2020-04-14 23:14  码上翻身  阅读(549)  评论(0编辑  收藏  举报

导航