2008-09-11 105 views
19

我開始學習ruby。我也是一個日常的C++開發人員。 對於C++項目中,我通常與以下目錄結構純Ruby項目的目錄佈局

/ 
-/bin <- built binaries 
-/build <- build time temporary object (eg. .obj, cmake intermediates) 
-/doc <- manuals and/or Doxygen docs 
-/src 
--/module-1 
--/module-2 
-- non module specific sources, like main.cpp 
- IDE project files (.sln), etc. 

你會建議什麼DIR佈局紅寶石(非Rails的,非Merb的),以保持它的清潔,簡單,維護去?

+1

最新的newgem產生更少的cruft這很好。 – 2008-12-30 04:31:17

回答

11

你可以安裝newgem RubyGem,讓它爲您生成的佈局。

$ gem install newgem 
$ newgem spider 
     create 
     create config 
     create doc 
     create lib 
     create script 
     create tasks 
     create lib/spider 
     create History.txt 
     create License.txt 
     create Rakefile 
     create README.txt 
     create PostInstall.txt 
     create setup.rb 
     create lib/spider.rb 
     create lib/spider/version.rb 
     create config/hoe.rb 
     create config/requirements.rb 
     create tasks/deployment.rake 
     create tasks/environment.rake 
     create tasks/website.rake 
    dependency install_test_unit 
     create test 
     create test/test_helper.rb 
     create test/test_spider.rb 
    dependency install_website 
     create website/javascripts 
     create website/stylesheets 
     exists script 
     exists tasks 
     create website/index.txt 
     create website/index.html 
     create script/txt2html 
     force tasks/website.rake 
    dependency plain_theme 
     exists  website/javascripts 
     exists  website/stylesheets 
     create  website/template.html.erb 
     create  website/stylesheets/screen.css 
     create  website/javascripts/rounded_corners_lite.inc.js 
    dependency install_rubigen_scripts 
     exists script 
     create script/generate 
     create script/destroy 
     create script/console 
     create Manifest.txt 
     readme readme 
Important 
========= 

* Open config/hoe.rb 
* Update missing details (gem description, dependent gems, etc.) 

然後,在LIB /,可以在需要時創建模塊:

lib/ 
    spider/ 
    base.rb 
    crawler/ 
    base.rb 
    spider.rb 
    require "spider/base" 
    require "crawler/base" 
1

爲什麼不使用相同的佈局?通常情況下,你不需要編譯,因爲沒有編譯步驟,但其餘的對我來說似乎沒問題。

我不確定你是什麼意思的模塊,但如果它只是一個單獨的文件夾不需要一個單獨的文件夾,如果有多個文件,你通常會寫一個module-1.rb文件(在名稱級別作爲module-1文件夾),它只需要module-1 /中的所有內容。

哦,我建議使用Rake來管理任務(而不是make)。

2

@Dentharg:您的「包含一個包含所有子部分」是一種常見模式。像任何事情一樣,它有它的優點(容易得到你想要的東西)及其缺點(許多包括可能污染名稱空間,你無法控制它們)。你的模式是這樣的:

- src/ 
    some_ruby_file.rb: 
     require 'spider' 
     Spider.do_something 

+ doc/ 

- lib/ 
    - spider/ 
     spider.rb: 
     $: << File.expand_path(File.dirname(__FILE__)) 
     module Spider 
      # anything that needs to be done before including submodules 
     end 

     require 'spider/some_helper' 
     require 'spider/some/other_helper' 
     ... 

我可能會建議是爲了讓多一點控制:

- src/ 
    some_ruby_file.rb: 
     require 'spider' 
     Spider.include_all 
     Spider.do_something 

+ doc/ 

- lib 
    - spider/ 
     spider.rb: 
     $: << File.expand_path(File.dirname(__FILE__)) 
     module Spider 
      def self.include_all 
      require 'spider/some_helper' 
      require 'spider/some/other_helper' 
      ... 
      end 
     end 
0

我會堅持到類似的東西是你所熟悉的:有沒有點是在自己的項目目錄中的陌生人。 :-)

我一直都有的典型事情是lib | src,bin,test。

(我不喜歡這些怪物發電機:我想用一個新的項目,做的第一件事就是讓一些代碼了,不寫自述,文檔等!)

0

所以我newgem去。 我刪除了所有不必要的RubyForge/gem東西(鋤頭,安裝等),創建了git repo,導入項目到NetBeans中。所有花了20分鐘,一切都是綠色的。 這甚至給了我一個基本的規格文件rake任務。

謝謝大家。

20

截至2011年,通常使用jeweler代替newgem,因爲後者已被有效放棄。

+16

或Bundler。給你「捆綁gem gemname」來創建一個新的寶石。 – 2011-08-15 23:33:39

10

一個標準的Ruby項目的核心結構基本上是:

lib/ 
    foo.rb 
    foo/ 
    share/ 
    foo/ 
    test/ 
    helper.rb 
    test_foo.rb 
    HISTORY.md (or CHANGELOG.md) 
    LICENSE.txt 
    README.md 
    foo.gemspec 

share/是罕見的,有時也稱爲data/代替。它用於通用的非ruby文件。大多數項目不需要它,但即使他們做了很多次,一切都保存在lib/中,儘管這可能不是最佳實踐。

test/目錄可能被稱爲spec/如果正在使用的,而不是TDD BDD,雖然你可能還會看到features/如果使用黃瓜,或demo/如果使用QED。

這幾天foo.gemspec只能是.gemspec - 特別是如果它不是手動維護。

如果你的項目有命令行可執行文件,然後添加:

bin/ 
    foo 
    man/ 
    foo.1 
    foo.1.md or foo.1.ronn 

此外,大多數Ruby項目的有:

Gemfile 
    Rakefile 

Gemfile是使用捆紮機,而Rakefile是耙構建工具。但是如果您想使用不同的工具,還有其他選擇。

其他一些不那麼常見的文件:

VERSION 
    MANIFEST 

VERSION文件只包含當前的版本號。 MANIFEST(或Manifest.txt)包含要包含在項目包文件中的文件列表(例如,gem包)。

還有什麼你可能會看到,但用法是零星的:

config/ 
    doc/ (or docs/) 
    script/ 
    log/ 
    pkg/ 
    task/ (or tasks/) 
    vendor/ 
    web/ (or site/) 

config/包含各種配置文件; doc/包含生成的文檔,例如RDoc,或有時手動維護的文檔; script/包含供項目使用的shell腳本; log/包含生成的項目日誌,例如測試覆蓋率報告; pkg/保存生成的包文件,例如, foo-1.0.0.gem; task/可以容納各種任務文件,如foo.rakefoo.watchr; vendor/包含其他項目的副本,例如git submodules;最後web/包含該項目的網站文件。

那麼有些工具特定文件也比較常見:

.document 
    .gitignore 
    .yardopts 
    .travis.yml 

他們是相當不言自明。

最後,我要補充的是,我個人添加.index文件和var/目錄建立一個文件(搜索「Rubyworks索引」瞭解更多有關),往往有一個work目錄,是這樣的:

work/ 
    NOTES.md 
    consider/ 
    reference/ 
    sandbox/ 

只是一種用於開發目的的廢棄物。