by pilipala
| published:
2011/11/15
你在ruby世界看到到處都是gem。他們幾乎是所有的ruby應用程式的核心。我承認當我試著建立第乙個gem的時候,我有點戰戰兢兢。但我很快就發現了,這玩意簡單得要死。在這個部落格系列中,我將涵蓋從頭開始建立乙個gem的基礎,然後轉移到更高階的主題,包括gem生成工具和rails引擎。首先,對於你們這些ruby有新手,第乙個問題是:什麼是gem?簡而言之,它是打包的ruby**。在最低限度,gem包括乙個ruby檔案和乙個gemspec。gemspec(gem規範)描述gem資訊,rubygems包管理器需要這些資訊安裝gem。
require 'rubygems'ruby 1.9中不需要這麼做,因為rubygems已經被包含在ruby 1.9中。
gem規範(gem specification)
正如我在前面提到,gem的規範描述了gem。讓我們看看乙個基本的gemspec檔案:
view plain
copy to clipboard
print?
gem::specification.
newdo
|s|
s.name = %q
s.version = "0.0.1"
s.date = %q
s.summary = %q
s.files = [
"gemfile"
, "rakefile"
, "version"
, "lib/my_gem.rb"
] s.require_paths = ["lib"
] end
gemspec是乙個相當簡單的檔案,描述你的gem的各個方面。在上面的例子gemspec中的檔案中,我只列出必需的屬性。
前4個屬性是不言自明。「檔案」屬性中列出包括在gem中的所有檔案。
「require_paths」屬性指定的目錄,其中包含ruby檔案應該被這個gem所載入。gemspec所用到的完整屬性列表,請參考這裡。
這是一些簡單的基礎知識,現在讓我們切入正題,尋找更有趣的東西。
從頭開始建立乙個gem
1、建立gem的基本檔案結構:
輸入shell指令,並建立gem需要的目錄:
$ mkdir awesome_gem就這樣!你需要為你的gem和乙個lib目錄來存放你的ruby檔案的根目錄。$ cd awesome_gem
$ mkdir lib
2、建立的gemspec
我們將使用上一節gemspec檔案作為模板。建立乙個名為「awesome_gem.gemspec」在你的gem的根目錄中。然後新增一些**,以成為乙個有效的gemspec:
view plain
copy to clipboard
print?
gem::specification.
newdo
|s|
s.name = %q
s.version = "0.0.0"
s.date = %q
s.summary = %q
s.files = [
"lib/awesome_gem.rb"
] s.require_paths = ["lib"
] end
這個檔案包含了乙個gemspec標準所需的屬性,並且顯示我們有乙個「lib」目錄。在lib目錄中的檔案「awesome_gem.rb」將被用來儲存這個gem的ruby**。
3、新增一些**
為了簡單起見,我們將只用乙個ruby檔案在這個gem裡:/lib/awesome_gem.rb,你會看到這種結構型別在大多數你遇到的gem中。 「lib」內的根檔案通常會與gem的名稱相匹配。本例中,「awesome_gem」和「/lib/awesome_gem.rb」 。
繼續建立這個檔案,新增下面的**:
view plain
copy to clipboard
print?
module
awesomegem
class
whois
defself
.awesome?
puts "you are awesome!!"
endend
end
這雖然不是什麼改變世界的**,至少, awesome? 方法讓你感覺不錯。這個gem將允許你在其他ruby程式裡面使用 whois 的類方法awesome?。
正如我在第一部分中提到,rubygems的將安裝gem在你的應用程式中,並使用gem中的類。
4、生成的gem檔案
現在,你有一些很棒的**,你將要建立乙個gem,所以你可以在另乙個ruby程式用這些**。rubygems提供命令,讓你建立乙個gem。輸入下面命令在gem的根目錄:
$ gem build awesome_gem.gemspec此命令將建立gem和輸出gem檔案,將包括版本號在檔名中。由於gemspec中版本屬性的值是「0.0.0」,gem的檔案將被命名為awesome_gem-0.0.0。
你應該看到下面的輸出和對一些缺少的屬性警告:
successfully built rubygem你可以忽略這些警告,繼續在系統上安裝這個gem。請注意,gem檔案被建立在當前目錄中。name: awesome_gem
version: 0.0.0
file: awesome_gem-0.0.0.gem
5、安裝gem
gem install awesome_gem.gemspec你應該得到以下輸出:
successfully installed awesome_gem-0.0.0耶!你剛建立了gem!這個gem現在已經安裝在你的系統,並準備在另乙個ruby程式中使用。1 gem installed
installing ri documentation for awesome_gem-0.0.0...
installing rdoc documentation for awesome_gem-0.0.0...
6、gem的另乙個ruby程式
建立乙個新的ruby檔案將用來測試我們的gem。讓我們叫它「be_awesome.rb」。你可以在你的系統中的任何位置建立此檔案,然後新增下面的**,所以我們可以使用gem中的「awesom?」類方法。用 require 「awesome_gem」,rubygems將能夠找到gem,把這個類提供給你的程式。然後你只需要呼叫它。以下是**:
view plain
copy to clipboard
print?
require
'awesome_gem'
awesomegem::whois.awesome?
現在你可以執行ruby程式和測試你新建立的gem,看看你是如何awesome的。通過命令列輸入:
ruby be_awesome.rb你應該看到在你的shell下面的輸出:
your are awesome!恭喜你,你只要在程式中使用你的新的gem!雖然它還不值得放在github上,跟朋友吹噓,但是, 你還是學會了如何從頭開始建立乙個gem,並在另乙個程式中使用它。現在,你可以繼續前進,追求更大的進步。
結論
雖然本教程是相當簡單,只涉及建立乙個基本的gem,我認為它對新的gem開發者仍然很重要。
基礎知識給你乙個進入高階的主題良好基礎。平時,我用jeweler去創造gem,這的確是乙個功能強大的工具, 但我覺得手工從頭建立乙個gem之前就用這樣的生成工具,可能是有害的。
你需要了解如何構建乙個gem的最簡單的形式,才可以理解像jeweler這樣的生成工具的背後是什麼。雖然我建議在你第一次學習gem開發時,手工從頭建立乙個gem。但是,當你理解了基礎知識,就沒什麼理由拒絕使用生成器了。
生成器可以節省很多時間,因為他們給你乙個很好的起始架構。本系列的下乙個部落格後,將有關gem的開發,以及更高階的主題,諸如:如何使用生成工具來開始你的gem開發。以後的文章將解釋如何開發ruby on rails的gem。
如何建立自己的第乙個gem
1 使用bundle gem hhg10建立乙個名為hhg10的資料夾 2 修改檔案為hhg10.gemsepc檔案。在相應的lib hhg10下完成相關功能的rb檔案寫 3 執行打包gem build hhg10.gemspec 會出現success built rubygem字眼成功 接下來就是...
建立你的第乙個Docker Services
前面我們通過建立乙個docker容器來執行我們的web應用,已經初步了解了docker的威力 1.編寫我們的第乙個docker compose.yml檔案,它採用了yaml格式,內容如下 version 3 services web image demo deploy replicas 3 reso...
建立你的第乙個 Git 倉庫
雖然 git 確實是被許多重要軟體選作版本控制工具,但是並不是僅能用於這些重要軟體 它也能管理你購物清單 如果它們對你來說很重要的話,當然可以了 你的配置檔案 週報或日記 專案進展日誌 甚至源 使用 git 是很有必要的,畢竟,你肯定有過因為乙個備份檔案不能夠辨認出版本資訊而抓狂的時候。git 無法...