Rails3:使用bundler管理gems

bundler 是一套为了 Rails3 所打造的全新 Gem dependencies 管理工具:一套基于 Rubygems 的更高阶套件管理工具,适合让 Application 管理多套 Gems 依存关係的複杂情境。而你在 Rails3 中 (Bundler 不只用在 Rails3,其他例如 Sinatra 或是 Rails2 也都可以使用) 要使用的 Gems,也都必须宣告在它的 Gemfile 裡,没写在裡面的话,就算手动 require 也找不到。这跟已往你可以直接 require 任意 rubygems 不同,在使用 Bundler 的环境中,要 require 什麽 rubygems 必须透过 Gemfile 管理。

Gemfile 的寫法大致如下:

# 第二个参数可以指定版本
gem "rails", "3.0.0.beta3"
 
# 如果 require 的档名不同,可以加上 :require
gem "sqlite3-ruby", :require => "sqlite3"
 
# 可以用 Git 当做来源,甚至可以指定 branch, tag 或 ref。
gem "authlogic", :git => "git://github.com/odorcicd/authlogic.git",
:branch => "rails3"
 
# 可以直接用电脑裡的其他目录
gem "rails", :path => "/Users/ihower/github/rails"
 
# Group 功能可以让特定环境才会载入
group :test do
gem "rspec-rails", ">= 2.0.0.beta.8"
gem "webrat"
end

设定好 Gemfile 之后,我们有一些指令可以用:

  • bundle check 可以检查目前缺少哪些 rubygem,然后你可以手动透过 sudo gem install 安装到系统裡。
  • bundle install 安装所有需要的套件。如果系统已经有装了,就用系统的,不然会装到 $BUNDLE_PATH 下,预设是你家目录 ~/.bundle (因此请不要用 sudo 执行 bundle install)。如果来源是 git (例如上述的 authlogic),每次执行 bundle install 就会自动 git pull 更新,十分方便。
  • bundle lock 和 bundle unlock 会做 snapshotting 记录下目前所有套件的版本在 Gemfile.lock,建议这个档桉也一起 commit 出去。适合要佈署或多人开发时,可以确保大家的版本都一致。
  • bundle package 如果你的 Server 没联外网路,或是怕 rubygems.org 连不上,可以用这个指令把所有套件都打包到 vendor/cache 下。基本上,跟以往 Rails 1.X 2.X 时代佈署时会建议你尽量打包依存套件并 commit 出去,在使用 Bundler 后已经大大地不需要了,因为透过 bundle lock 我们就可以确保每台机器上执行的套件版本一致。
  • bundle exec 因为 Bundle 可以说是独立出一个套件环境,所以如果有非 Rails 的指令需要执行,而且你的系统 Gems 又没有安装,那就会需要透过 bundle exec XXX 来执行。例如 bundle exec cucumber。
  • bundle show gem_name 可以查看这个 online casino gem 的目录位置
  • bundle open gem_name 可以用编辑器打开这个 gem 的目录

Rails3:使用bundler管理gems的更多相关文章

  1. 项目管理软件---redmine安装配置

    redmine是一个开源的项目管理软件,其主页是:http://www.redmine.org redmine是基于Ruby on Rails框架的,跨平台和跨数据库. 安装过程 ========== ...

  2. Windows下安装Redmine-2.5.3

    安装准备 服务器操作系统:Windows Server 2008 R2 Standard,64位操作系统. RailsInstaller版本:2.2.4  (下载地址http://railsinsta ...

  3. Unix 下 使用 RVM 管理 Ruby 和 gem

    转载:http://www.ibm.com/developerworks/cn/aix/library/au-aix-manage-ruby/   尽管 Internet Relay Chat.论坛和 ...

  4. ansible 模块 分享

    A a10_server 管理A10 Networks AX / SoftAX / Thunder / vThunder设备 a10_service_group 管理A10网络设备的服务组 a10_v ...

  5. centos7安装redmine3.4

    前言:安装要求 Ruby解释器 给定Redmine版本所需的Ruby版本是: Redmine版本 支持的Ruby版本 使用Rails版本 4.0 ruby 2.2(2.2.2及更高版本),2.3,2. ...

  6. 基于ruby环境搭建Redmine

    环境说明 系统版本    CentOS 6.9 x86_64 软件版本    ruby 2.4.4 rails 4.2 redmine-3.4.5 Redmine是一个开源的.基于Web的项目管理和缺 ...

  7. rackup工具

    gem包rack提供了rackup工具来启动webapplication 下面是一个入门范例,使用 bundler 管理库的一个sinatra应用   在begin文件夹下有三个文件 begin.ru ...

  8. 《Effective-Ruby》读书笔记

    本篇是在我接触了 Ruby 很短一段时间后有幸捧起的一本书,下面结合自己的一些思考,来输出一下自己的读书笔记 前言 学习一门新的编程语言通常需要经过两个阶段: 第一个阶段是学习这门编程语言的语法和结构 ...

  9. WEEX-EROS开发小笔记

    本文是作者之前刚接触移动端跨平台开发,使用weex-eros开发项目平日里记下来的一些笔记,分享出来方便为新手解惑,weex-eros是weex的一套解决方法,使用vue语法糖,对于前端开发者来说可以 ...

随机推荐

  1. MS入门学习笔记

    1.建立晶体:选择晶系,添加原子:2.导入系统晶体文件:3.建立分子molecule,画原子:4.计算简单分子molecule:注意事项: 1)做了一个H2O分子,接下来要做一个“立体壳子”,因为CA ...

  2. 用apicloud+vue的VueLazyload实现缓存图片懒加载

    <script src="../../script/vue-lazyload.js"></script><img v-lazy="remot ...

  3. Centos6.5安装配置svn服务器

    一. yum安装svn服务器 yum -y install subversion 二. 检测安装结果 svnserve --version //显示安装结果,表示安装成功了 三. 创建代码仓库目录 m ...

  4. [Mac Terminal] ___MAC终端清屏快捷键

    清全屏: command + K 清上一行命令:command +  L

  5. CNN文本分类

    CNN用于文本分类本就是一个不完美的解决方案,因为CNN要求输入都是一定长度的,而对于文本分类问题,文本序列是不定长的,RNN可以完美解决序列不定长问题, 因为RNN不要求输入是一定长度的.那么对于C ...

  6. CentOS7 NAT配置

    环境说明:Cloud1中的GE0/0/1.GE0/0/3.GE0/0/5接口,分别与Centos7中的eth1.eth2.eth3接口桥接到同一虚拟网卡,R1,R2,R3均配置一条静态默认路由指向Ce ...

  7. (三)认识twisted reactor

    一.reactor是单线程模型,简单粗暴,也就是说网络IO和我们的业务逻辑一般是在一个线程里,其中网络IO通过event loop的方式去异步执行,效率也很高.看下官网的这幅图,比较清晰 twiste ...

  8. spring mvc + xmlHttpRequest2.0 实现无刷新上传文件,带进度条和剩余时间

    1.springmvc支持文件上传,需要在spring-mvc.xml配置文件中加上下面的一段话: <!-- 支持上传文件 --> <bean id="multipartR ...

  9. pureftp安装

    1.下载 #cd /usr/local/src #wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.36.t ...

  10. jquery做一个小的轮播插件---有BUG,后续修改

    //首页无缝轮播 ; (function($, window, document, undefined) { $.fn.slider = function(options) { var default ...