这节课咱们讲解Bundle的构建和Gemfile的使用方法。以前咱们只是两句话代码,这节课咱们进一步来说解: git
什么事bundler? ruby
是rails应用程序中对gem依赖包进行管理的一种管理工具。它会根据Gemfile中的设置自动下载及安装对应的gem套件而且可以帮咱们解决不一样套件之间的依存关系。同时它可以使得程序在不一样的部署环境中使用的全部依赖包的版本都可以保持一致(由于Gemfile里面就做出限定,不一样环境可是都是根据同一个gemfile文件),这样移植到其余电脑或者让别人协同开发只要都根据同一个gemfile就能保持一致。 工具
Bundler的做用就是根据Gemfile的设置来保证在任何环境下安装的gem包都是同一个版本。 测试
rails3的版本若是你想添加任何gem包都必须将其显式地写在Gemfile中,与以前更早的版本可使用require关键词来引入gem包不一样。咱们如今用的是rails4的版本,统一使用gemfile进行统一管理明显更加方便, ui
Gemfile文件的以下代码表示只有在开发模式和测试模式中才使用里面的byebug这个gem包,若是想生产环境中也使用这个gem包那么在group关键词后面一样方式添加production就能够了 spa
以下则是只有开发模式才能使用那个gem包 blog
咱们建议Gemfile中版本号写死了比较好,好比,再不济也要使用波浪号的
(这种方式保证大版本号不变),这样写有什么好处呢?可以最大程度地下降由gem包升级形成的潜在的兼容性的风险,由于ruby和rails开源更新快,因此不把版本写死极可能会升级到一个新的你不熟悉的版本,从而致使兼容性问题。 开发
好比说,版本号有三部分用点隔开,第一个版本号4发生变更表示发生的是不向下兼容的变更,这是x版本号。若是第二个版本号1发生变更表示有新的功能增长,这是y版本号。若是第三个版本号0变更,表示一些bug的修正,这是z版本号。因此你最不济也用~>来保证正常使用(大版本号不变,说明顶可能是z版本号变更也就是修复一些bug而已)。 部署
至于的>=就避免使用。 同步
这样就能保证大型项目有一些升级的弹性又不至于升级太多致使不兼容的错误。
若是你修改了Gemfile这个文件,好比添加了新的gem包的声明代码,或者修改了已有gem包声明的版本,那么就须要使用一个命令叫bundle install来安装咱们全部的gem包,这个命令会检查并安装这些gem包同时生成一个Gemfile.lock文件。Gemfile.lock文件会列出当前工程使用的gem套件的具体版本,那么要注意的是若是你使用git这样的工具进行工程的同步开发,那么你必定要记得开commit或者push的时候要把Gemfile.lock文件一并推送过去,这样其余上线的开发者就会安装这个Gemfile.lock里面指定的库文件,目的仍是一个:保持多人开发gem版本的一致性。
下一个要讲的命令就是,bundle update 后面接上gem包的名字(不是gem_name)好比rails就会去更新相应的gem包版本。
只是bundle update后面无gem包名字,那么就是默认更新全部的gem包到最新版本。(不到必要,就别去使用bundle update这个命令,不然由于一次性更新太多gem包致使不兼容的几率是很是高的)。因此想升级gem包咱们就在后面添加须要升级的gem包的名字,一次只升级一个就行。
总之,若是有gem包发生变更,那么通常状况下咱们bundle install一个命令就能所有搞定。若是这个命令在执行过程当中出现没法安装的gem包,打断了安装的运行(这种状况很是常见);那么就须要使用gem命令对这些没法安装的gem包进行单独的安装并根据提示信息来解决可能出现的错误。
那么怎么知道哪些gem包在咱们工程里能够升级呢?那很简单,咱们可使用命令,就是已过期的命令这个命令会列出全部新版本、可升级的gem以下咱们发现arel已经安装的版本是6.0.3,最新版本是7.0.0,想升级的话能够选择它进行升级就能够了。
bundle的命令有不少,实际上使用最多的是bundle install这个命令而已(至关于一键搞定按钮了)