習題 46: 一個專案骨架
這裡你將學會如何建立一個專案「骨架」目錄。這個骨架目錄具備讓專案跑起來的所有基本內容。它裡邊會包含你的專案檔案佈局、自動化測試程式碼,模組,以及安裝腳本。當你建立一個新專案的時候,只要把這個目錄複製過去,改改目錄的名字,再編輯裡面的檔案就行了。
骨架內容: Linux/OSX
首先使用下述命令創建你的骨架目錄:
$ mkdir -p projects
$ cd projects/
$ mkdir skeleton
$ cd skeleton
$ mkdir bin lib lib/NAME test
我使用了一個叫 projects 的目錄,用來存放我自己的各個專案。然後我在裡邊建立了一個叫做 skeleton 的檔案夾,這就是我們新專案的基礎目錄。其中叫做 NAME 的檔案夾是你的專案的主檔案夾,你可以將它任意取名。
接下來我們要配置一些初始檔案:
$ touch lib/NAME.rb
$ touch lib/NAME/version.rb
然後我們可以建立一個 NAME.gemspec
的檔案在我們的專案的根目錄,這個檔案在安裝專案的時候我們會用到它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
編輯這個檔案,把自己的聯絡方式寫進去,然後放到那裡就行了。
最後你需要一個簡單的測試專用(我們將會在下一節中提到 Test )的骨架檔案叫 test/test_NAME.rb
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
安裝 Gems
Gems 是 Ruby 的套件系統,所以你需要知道怎麼安裝它和使用它。不過問題就來了。我的本意是讓這本書越清晰越乾淨越好,不過安裝軟體的方法是在是太多了,如果我要一步一步寫下來,那10 頁都寫不完,而且告訴你吧,我本來就是個懶人。
所以我不會提供詳細的安裝步驟了,我只會告訴你需要安裝哪些東西,然後讓你自己搞定。這對你也有好處,因為你將打開一個全新的世界,裡邊充滿了其他人發佈的軟體。
接下來你需要安裝下面的軟體套件:
- git - http://git-scm.com/
- rake - http://rake.rubyforge.org/
- rvm - https://rvm.beginrescueend.com/
- rubygems - http://rubygems.org/pages/download
- bundler - http://gembundler.com/
不要只是手動下載並且安裝這些軟體套件,你應該看一下別人的建議,尤其看看針對你的操作系統別人是怎樣建議你安裝和使用的。同樣的軟體套件在不一樣的操作系統上面的安裝方式是不一樣的,不一樣版本的 Linux 和 OSX 會有不同,而 Windows 更是不同。
我要預先警告你,這個過程會是相當無趣。在業內我們將這種事情叫做「yak shaving(剃犛牛)」。它指的是在你做一件有意義的事情之前的一些準備工作,而這些準備工作又是及其無聊冗繁的。你要做一個很酷的 Ruby 專案,但是創建骨架目錄需要你安裝一些軟體到件,而安裝軟體套件之前你還要安裝package installer (軟件套件安裝工具),而要安裝這個工具你還得先學會如何在你的操作系統下安裝軟體,真是煩不勝煩呀。
無論如何,還是克服困難吧。你就把它當做進入程式俱樂部的一個考驗。每個程式設計師都會經歷這條道路,在每一段「酷」的背後總會有一段「煩」的。
使用這個骨架
剃犛牛的事情已經做的差不多了,以後每次你要新建一個專案時,只要做下面的事情就可以了:
- 拷貝這份骨架目錄,把名字改成你新專案的名字。
- 再將
NAME
模組和NAME.rb
更名為你需要的名字,它可以是你專案的名字,當然別的名字也行。 - 編輯你的
NAME.gemspec
檔案,讓它包含你新專案的相關資訊。 - 重命名
test/test_NAME.rb
,讓它的名字匹配到你模組的名字。 - 開始寫程式吧。
小測驗
這節練習沒有加分習題,不過需要你做一個小測驗:
- 找文件閱讀,學會使用你前面安裝了的軟體套件。
- 閱讀關於
NAME.gemspec
的文件,看它裡邊可以做多少配置。 - 建立一個專案,在
NAME.rb
裡寫一些程式碼。 - 在
bin
目錄下放一個可以運行的腳本,找材料學習一下怎樣建立可以在系統下運行的 Ruby 腳本。 - 確定你建立的
bin
教本,有在NAME.gemspec
中被參照到,這這樣你安裝時就可以連它安裝進去。 - 使用你的
NAME.gemspec
和gem build
、gem install
來安裝你寫的程式和確定它能用。然後使用gem uninstall
去移除它。 - 弄懂如何使用 Bundler 來自動建立一個骨架目錄。