2009-03-05 78 views
114

我總結/澄清了紅寶石(非rails/merb/etc)項目的理想項目結構。我猜測它遵循以下幾點:理想的紅寶石項目結構

app/ 
    bin/     #Files for command-line execution 
    lib/ 
    appname.rb 
    appname/   #Classes and so on 
    Rakefile    #Running tests 
    README 
    test,spec,features/ #Whichever means of testing you go for 
    appname.gemspec  #If it's a gem 

我有什麼問題嗎?我錯過了哪些部分?

回答

84

我認爲這是非常重要的。默認情況下,Rubygems會將lib目錄添加到loadpath,但您可以使用$:變量將所需的任何目錄推送到該目錄。即

$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff') 

這意味着當你說,surfer.rb在目錄,你可以在任何地方require "surfer",文件將被發現。

此外,作爲一個約定,類和單例會得到一個文件,模塊將獲得一個目錄。舉例來說,如果你有LolCatz模塊和LolCatz::Moar類會是什麼樣子:

lib/ 
    appname.rb 
    lolcatz/ 
    moar.rb 

這就是爲什麼有一個LIB /應用程序的名字文件夾,因爲大多數圖書館都在appname命名空間。

此外,如果您嘗試運行命令newgem --simple [projectname],那麼只需使用Ruby項目(以及擴展Ruby Gem)的基本要素即可快速生成腳手架。我知道還有其他工具可以做到這一點,但newgem很常見。我通常擺脫TODO文件和所有腳本的東西。

+7

請注意下面的例子中,你將不得不[須藤]創業板安裝newgem得到newgem命令 – 2009-03-05 12:16:00

+1

甜蜜。我不知道newgem。我的非rails項目經常反映Rails結構,因爲我發現它很熟悉。感謝這個最佳實踐提示。 – 2009-03-06 05:30:04

6

我嘗試模仿Rails項目結構,因爲我的團隊通常會處理Rails,它會比其他配置更好地理解結構。約定優於配置 - 從Rails流血。

8

請參閱從http://guides.rubygems.org/what-is-a-gem/

% tree freewill 
    freewill/ 
    ├── bin/ 
    │ └── freewill 
    ├── lib/ 
    │ └── freewill.rb 
    ├── test/ 
    │ └── test_freewill.rb 
    ├── README 
    ├── Rakefile 
    └── freewill.gemspec