建立你的第乙個Gem

2021-06-05 06:10:21 字數 4106 閱讀 9358

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

$ cd awesome_gem

$ mkdir lib

就這樣!你需要為你的gem和乙個lib目錄來存放你的ruby檔案的根目錄。

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

name: awesome_gem

version: 0.0.0

file: awesome_gem-0.0.0.gem

你可以忽略這些警告,繼續在系統上安裝這個gem。請注意,gem檔案被建立在當前目錄中。

5、安裝gem

gem install awesome_gem.gemspec
你應該得到以下輸出:

successfully installed awesome_gem-0.0.0

1 gem installed

installing ri documentation for awesome_gem-0.0.0...

installing rdoc documentation for awesome_gem-0.0.0...

耶!你剛建立了gem!這個gem現在已經安裝在你的系統,並準備在另乙個ruby程式中使用。

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 無法...