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。
试验:
- 安装ruby gem
前提:试验环境中已存在ruby和rubygem
- 使用bundler安装gem
1). 在ruby project的根目录下写Gemfile
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而实现的。
- upgrade gems
- 更新现有的gem包的版本至高版本(而非latest)
编辑Gemfile中gem的version, 然后运行bundle install, 则Gemfile.lock会自动更新
我们可以看到,我们更新了rake gem到高一些的版本
- 更新没有指定版本的gem到latest版本,则运行bundle update gem
如果不指定gem, bundle update 则会更新所有满足条件的gem到最新版本。