2008-09-11 91 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/ 

只是一种用于开发目的的废弃物。