# Rubygems 與 gem
### 什么是RubyGems?
RubyGems是一個方便而強大的Ruby程序包管理器,Ruby的第三方插件是用gem方式來管理,非常容易發布和共享,一個簡單的命令就可以安裝上第三方的擴展庫。特點:能遠程安裝包,包之間依賴關系的管理,簡單可靠的卸載,查詢機制,能查詢本地和遠程服務器的包信息,能保持一個包的不同版本,基于Web的查看接口,能查看你安裝的gem的信息。
### 安裝RubyGems
官方站點 [http://rubygems.org/pages/download](http://rubygems.org/pages/download)
下載地址:[http://rubyforge.org/frs/?group_id=126](http://rubyforge.org/frs/?group_id=126)
Windows 用戶直接下載.zip壓縮包,解壓縮,從CMD提示窗口下進入 setup.rb所在目錄, 運行 ruby setup.rb 即可安裝。
Ruby1.9.1 以后的版本自帶RubyGems,直接在CMD窗口下輸入指令 gem update --system 升級到最新版即可。
### gem包的安裝方式:
RubyGems.org 是官方的Gem托管中心,RubyGems就是從這里遠程下載gem包的。RubyGems 將所有的gem包 安裝到 /[ruby root]/lib/ruby/gems/[ver]/ 目錄下,這其中包括了cache、doc、gems、specifications 4個目錄,cache下放置下載的原生gem包,gems下則放置的是解壓過的gem包。當安裝過程中遇到問題時,可以進入這些目錄,手動刪除有問題的gem包,然后重新運行 gem install [gemname] 命令即可。
RubyGems命令詳解:
我們以目前最新的 rubygems 1.8.16 為例:
~~~
# 查看RubyGems軟件的版本
gem -v
# 更新升級RubyGems軟件自身
gem update --system
# 更新所有已安裝的gem包
$ gem update
# 更新指定的gem包
# 注意:gem update [gemname]不會升級舊版本的包,可以使用 gem install [gemname] --version=[ver]代替
$ gem update [gemname]
# 安裝指定gem包,程序先從本機查找gem包并安裝,如果本地沒有,則從遠程gem安裝。
gem install [gemname]
# 僅從本機安裝gem包
gem install -l [gemname]
# 僅從遠程安裝gem包
gem install -r [gemname]
# 安裝gem包,但不安裝相關文檔文件
gem install [gemname] --no-ri --no-rdoc
# 安裝指定版本的gem包
gem install [gemname] --version=[ver]
# 刪除指定的gem包,注意此命令將刪除所有已安裝的版本
gem uninstall [gemname]
# 刪除某指定版本gem
gem uninstall [gemname] --version=[ver]
# 查看本機已安裝的所有gem包
gem list
# 列出遠程RubyGems.org 上有此關鍵字的gem包(可用正則表達式)
gem list -r keyword
# 列出遠程RubyGems.org 上所有Gmes清單,并保存到文件。
gem list -r > remote_gem_list.txt
#查看所有gem包文檔及資料
gem server
#顯示RubyGem使用幫助
gem help
#列出RubyGem命令一些使用范例
gem help example
~~~
### gem源
默認gem源是rubygems.org,但是在國內,因為一些眾所周知的原因,導致我們下載安裝gem會報網絡問題的錯,所以,我們可以用淘寶源,ruby.taobao.org。
### require
使用require,可以加載ruby文件到你需要的文件中。require后面加載的文件名,不需要寫Ruby文件的后綴.rb。
例如Chef gem中有一些代碼:
~~~
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
require 'chef/application/apply'
~~~
$:.unshift語句是把和當前文件**FILE**相對的lib目錄添加到PATH中, PATH是Ruby的文件查找路徑數組,require命令,會在里面查找。
上面的例子表示, require lib/chef/application/apply.rb文件到當前代碼文件中。
Ruby中除了require,還有load、autoload等,這個我們以后再說, 先了解require就夠用了。
- 序
- Chapter 1: 初識Chef
- 一些背景
- Chef vs Puppet
- Chapter 2: Chef應用
- Chef架構
- Chef能做什么
- Chef組件
- Chef環境安裝
- chef-server
- opscode-chef
- chef-solo
- Chef實戰
- 實戰前的必修理論
- 使用Chef
- Chapter 3: Ruby基礎
- 對象與方法
- 標識符
- 類與模塊
- 數據類型
- 真與假
- 控制語句
- 代碼塊
- Chapter 4: Chef源碼架構
- Rubygems與gem
- bundler
- Chef源碼組織
- Chapter 5: Rails基礎
- Rails是什么
- MVC架構
- Restful
- Rails組成與項目結構
- Chapter 6: Chef Server WebUI
- Chef Server Webui組織結構
- Chef Rest API
- 參考