【Ruby】Bundlers相关

Bundlers的目的和原理
最主要的作用就是Bundlers可以通过gemfile安装需要的gem

首先,在应用程序根目录的一个名为Gemfile的文件中声明这些依赖项。它看起来是这样的:

source 'https://rubygems.org'

gem 'rails', '4.1.0.rc2'
gem 'rack-cache'
gem 'nokogiri', '~> 1.6.1'

Gemfile说明了一些事情。首先,它说bundler应该在默认情况下从https://rubygems.org上查找在Gemfile中声明的gem。如果您的一些gem需要从私有gem服务器获取,那么这个默认的源可以被覆盖。
接下来对于几个依赖的版本进行了说明:
rails的版本必须是4.1.0.rc2
rack-cache可以使任何版本
nokogiri的版本需要大于1.6.1

在声明了第一组依赖项之后,告诉bundler去获取它们:

 bundle install #bundle”是“bundle install”的快捷方式

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

$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Using rake 10.3.1
Using json 1.8.1
Installing minitest 5.3.3
Installing i18n 0.6.9
Installing thread_safe 0.3.3
Installing builder 3.2.2
Installing rack 1.5.2
Installing erubis 2.7.0
Installing mime-types 1.25.1
Using bundler 1.6.2
Installing polyglot 0.3.4
Installing arel 5.0.1.20140414130214
Installing hike 1.2.3
Installing mini_portile 0.5.3
Installing multi_json 1.9.3
Installing thor 0.19.1
Installing tilt 1.4.1
Installing tzinfo 1.1.0
Installing rack-test 0.6.2
Installing rack-cache 1.2
Installing treetop 1.4.15
Installing sprockets 2.12.1
Installing activesupport 4.1.0.rc2
Installing mail 2.5.4
Installing actionview 4.1.0.rc2
Installing activemodel 4.1.0.rc2
Installing actionpack 4.1.0.rc2
Installing activerecord 4.1.0.rc2
Installing actionmailer 4.1.0.rc2
Installing sprockets-rails 2.0.1
Installing railties 4.1.0.rc2
Installing rails 4.1.0.rc2
Installing nokogiri 1.6.1
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

如果已经安装了任何所需的gem, Bundler将使用它们。在系统中安装任何需要的gem之后,bundler会写一个它安装到Gemfile.lock中的所有gem和版本的快照。

将应用程序设置为使用Bundler

Bundler确保Ruby可以在Gemfile中找到所有gem(以及它们的所有依赖项)。
如果您的应用程序是一个Rails 3+的应用程序,那么您的默认应用程序已经拥有调用bundler所需的代码。
如果是Rails 2.3应用程序,请参阅在Rails 2.3中设置Bundler。

对于另一种应用程序(比如Sinatra应用程序),在尝试使用gem之前,需要先设置bundler。在应用程序加载的第一个文件的顶部(对于Sinatra,调用的文件需要’ Sinatra ')
输入以下代码:

require 'rubygems'
require 'bundler/setup'

这将自动发现您的Gemfile,并使您的Gemfile中的所有gem对Ruby可用(用技术术语来说,它将gem“放在加载路径上”)。

既然Ruby可以使用您的代码,那么您就可以要求您需要的gem了。
例如“require sinatra”
如果你有很多依赖项,你可能需要:“require all of the gems in my Gemfile”
要做到这一点,将以下代码紧跟着require 'bundler/setup'

Bundler.require(:default)

对于我们的示例Gemfile,这一行完全等同于:

require 'rails'
require 'rack-cache'
require 'nokogiri'

不难发现requirerack-cachegem的方式是require 'rack/cache'而不是require 'rack-cache',去告诉bundler

source 'https://rubygems.org'

gem 'rails', '4.1.0.rc2'
gem 'rack-cache', require: 'rack/cache'
gem 'nokogiri', '~> 1.6.1'

对于这样一个小的Gemfile,我们建议您跳过Bundler。需要并且只需要手工的gem(特别是考虑到需要在Gemfile中放入:require指令)。对于更大的gemfile,使用Bundler。require允许您跳过重复大量的需求。

检查你的代码版本
在开发应用程序一段时间后,将应用程序连同Gemfile和Gemfile.lockkuai快照检入。这样存储库就有了上次确定应用程序工作时使用的所有gem的准确版本的记录。
请记住,虽然您的Gemfile只列出了三个gem(版本严格程度不同),但一旦您考虑到所依赖的gem的所有隐式需求,您的应用程序就依赖于几十个gem。
这一点很重要:Gemfile.lock使您的应用程序成为一个单独的包,包含您自己的代码和在您确信一切正常时它运行的第三方代码。指定您所依赖的第三方代码的确切版本。

更多内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值