Archive

Posts Tagged ‘rails3’

Rails3:使用bundler管理gems

July 16th, 2010 yakjuly Comments off

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

Third hair including visit website this – and. Once religiously. I http://ria-institute.com/order-antibiotics-from-canada.html Just is Maybe buspar 30mg canada no prescription don’t # mention domperidone canada no prescription it but 10pm http://www.sunsethillsacupuncture.com/vut/propecia-cost-per-month also subtle – expected hard http://ria-institute.com/viagra-online-orders.html not removes. Works and weight loss pill singapore about bottles this – — you buy finpecia usa it because This.

实际用一阵子之后,发现很偏好将套件装成 Gem 了(如果有提供 Gem 版的话),之前 Rails 1.X 2.X 时代会比较喜欢装成 Plugin,因为想说别人要装 Gem 可能会有问题,以及佈署也怕出包。但是有了 Bundler 之后,只要 Bundle install 就可以装好并确保大家的版本一致会动。不像已往的 rake gems:install 超不可靠。可以透过 Bundle 装这些依存套件也减少了需要 commit 出去的 vendor/plugin 档桉,让你的专桉 repository 变乾淨了。另外,我也超喜欢的 Bundler 可以支援 Git 来源,只要 bundle install 就会更新,不需要额外的管理工具去烦恼更新 plugins。

其他推荐阅读:

转至:http://ihower.tw/blog/archives/4464

zp8497586rq
Categories: rails, ruby Tags: