一个标准的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/ 中,尽管这可能不是最佳做法。
如果使用 BDD 而不是 TDD,则 test/ 目录可能称为 spec/,但如果使用 Cucumber,您可能还会看到 features/,如果使用 QED,您可能还会看到 demo/。
如今foo.gemspec 只能是.gemspec——尤其是在不手动维护的情况下。
如果您的项目有命令行可执行文件,则添加:
bin/
foo
man/
foo.1
foo.1.md or foo.1.ronn
此外,大多数 Ruby 项目都有:
Gemfile
Rakefile
Gemfile 用于使用 Bundler,Rakefile 用于 Rake 构建工具。但如果您想使用不同的工具,还有其他选择。
其他一些不常见的文件:
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.rake 或foo.watchr 等各种任务文件; vendor/ 包含其他项目的副本,例如git子模块;最后web/ 包含项目的网站文件。
然后是一些也比较常见的工具专用文件:
.document
.gitignore
.yardopts
.travis.yml
它们是不言自明的。
最后,我要补充的是,我个人添加了一个 .index 文件和一个 var/ 目录来构建该文件(搜索“Rubyworks Indexer”以获取更多信息)并且通常有一个 work 目录,类似于:
work/
NOTES.md
consider/
reference/
sandbox/
只是一个用于开发目的的废品场。