20--Bundle与Gemfile

这节课我们讲解Bundle的构建和Gemfile的使用方法。之前我们只是两句话代码,这节课我们进一步来讲解:

什么事bundler?

是rails应用程序中对gem依赖包进行管理的一种管理工具。它会根据Gemfile中的设置自动下载及安装对应的gem套件并且能够帮我们解决不同套件之间的依存关系。同时它能够使得程序在不同的部署环境中使用的所有依赖包的版本都能够保持一致(因为Gemfile里面就作出限定,不同环境但是都是根据同一个gemfile文件),这样移植到其他电脑或者让别人协同开发只要都根据同一个gemfile就能保持一致。

Bundler的作用就是根据Gemfile的设置来保证在任何环境下安装的gem包都是同一个版本。

rails3的版本如果你想添加任何gem包都必须将其显式地写在Gemfile中,与之前更早的版本可以使用require关键词来引入gem包不同。我们现在用的是rails4的版本,统一使用gemfile进行统一管理明显更加方便,

Gemfile文件的如下代码表示只有在开发模式和测试模式中才使用里面的byebug这个gem包,如果想生产环境中也使用这个gem包那么在group关键词后面同样方式添加production就可以了

如下则是只有开发模式才能使用那个gem包

?

我们建议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这个命令而已(相当于一键搞定按钮了)

?

时间: 2024-11-05 14:48:05

20--Bundle与Gemfile的相关文章

Rails连接mysql数据库在ubuntu上跑

Rails安装好 Rails 在ubuntu上安装rails(rvm ruby gem Bootstrap bootswatch) rails 4.1.4 ruby 2.2.0 sudo apt-get install mysql-server mysql-client 安装mysql(安装过程中设置mysql用户root密码) sudo apt-get install libmysqlclient-dev (https://github.com/brianmario/mysql2 看这段说明L

Android中Serializable和Parcelable序列化对象详解

学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Parcelable进行序列化操作 5.Parcelable的工作原理 6.相关实例 1.序列化的目的 (1).永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中 (2).通过序列化操作将对象数据在网络上进行传输(由于网络传输是以字节流的方式对数据进行传输的.因此序列化的目的是将对象数据转换成字节流的形式) (3).将对象数据在进程

小学四则运算APP 最后阶段

团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 这次发布的是我们APP的最终版本!图片背景有根据用户需求改变!还增加了草稿纸运算的画布功能! 运行结果如下: 1 package com.example.calculator; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.content.Intent; 6 import android.view.Menu; 7 import

cocos2dx---c++与java互调

使用cocos2dx开发游戏过程中难免需要调用其他代码,因为其是跨平台的.必然会要去调用不同平台的代码,这篇博客就介绍如何使用Jni来实现c++与java代码的互调. 先实现c++调用Android的java层代码.我们先添加一个类,比如类名叫CallJava,下面贴上代码,再做解释: 1 #ifndef __CALL_JAVA_H__ 2 #define __CALL_JAVA_H__ 3 4 #include "cocos2d.h" 5 USING_NS_CC; 6 7 #if (

Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系

devise.cancan和rolify这三个组件结合,可以建立完整而强大的用户权限模型. devise介绍,负责用户注册.登录.退出.找回密码等操作.细节参考devise on github cancan介绍, 负责角色建立.对角色授权.在页面中根据授权是否显示元素,以及模型中超出授权时抛出异常.细节参考rolify on github rolify介绍,负责将用户与角色关联.细节参考rolify on github 下面就简单介绍下这三者结合使用的方法,比较浅,深层次的大家自己去看文档挖掘,

Android学习笔记之fragment的通信

1.布局文件 mian.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:id="@+id/linearLayout" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:o

快速了解Android重要机制

转自 http://www.jianshu.com/p/5f6d79323923 一.Android系统底层研究 关于底层的知识点不是在一篇文章中能讲解清楚,参见本人的Android底层研究系列,不断更新中. 二.Android重要知识点 下面精选了较为常见的知识点,坚决杜绝简单罗列答案的方式,因为那样理解不了也记不住.所以尽量以层层递进而简单粗暴的方式来表达.耐心点看,一定能帮你应对大多数面试问题. Tips:可以先阅读自己熟悉的知识点,然后再去看那些不太熟悉的. 1.Activity启动模式

3--第一个Rails程序(不完全版)

选择工程目录 创建名为maizi2的工程(工程名要避免与Rails关键字不同,否则创建会失败) 可以看到工程maizi2成功创建了: 3. ? ? app文件夹是核心文件夹,MVC代码都在这个文件夹里面: assets是资源文件,层叠样式表和javascript和图片资源都在这个文件夹里面 config文件夹是进行数据库的配置,环境的配置,以及路由的配置 test文件夹存放所有Rails应用的测试代码,后面我们会专门学习编写Rails的test代码 lib文件夹和vendor文件夹存放项目需要的

KBEngine warring项目源码阅读(一) 项目简介和注册登录

首先介绍下warring项目,是kbe自带的一个演示示例,大部分人了解kbe引擎也是从warring项目开始的. 项目地址:https://github.com/kbengine/kbengine_unity3d_warring 项目截图: 项目的下载和安装不再多说,现在开始进入代码讲解阶段: 注册: 可以看到控件绑定代码为reg_ok,点进去 1 void reg_ok() 2 { 3 log_label.obj.text = "请求连接服务器..."; 4 log_label.ob

Android中显示和隐式Intent的使用

显示启动activity                                                                                                                   这个很简单,下面是代码示例:为了看着方便,所以就把layout直接截图了,里面的代码只是一些简单的布局.activity_login.xml: activity_main.xml: 下面是Manifest.xml中的代码 1 <?xml vers