130

我正在对 ruby​​(非 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

我有什么问题吗?我错过了哪些部分?

4

4 回答 4

93

我认为这是非常正确的。默认情况下,Rubygems 会将 lib 目录添加到加载路径中,但是您可以使用 $: 变量将您想要的任何目录推送到该目录中。IE

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

这意味着当您说surfer.rb在该目录中时,您可以require "surfer"在任何地方找到该文件。

此外,按照惯例,类和单例获取文件,模块获取目录。例如,如果您有如下所示的LolCatz模块和LolCatz::Moar类:

lib/
  appname.rb
  lolcatz/
    moar.rb

这就是为什么有一个 lib/appname 文件夹的原因,因为大多数库都在appname命名空间中。

此外,如果您尝试运行该命令newgem --simple [projectname],它将快速为您生成一个脚手架,其中仅包含 Ruby 项目(以及扩展的 Ruby Gem)的基本要素。我知道还有其他工具可以做到这一点,但 newgem 很常见。我通常会摆脱 TODO 文件和所有脚本内容。

于 2009-03-05T11:20:58.690 回答
12

请参阅http://guides.rubygems.org/what-is-a-gem/中的以下示例

 % tree freewill
    freewill/
    ├── bin/
    │   └── freewill
    ├── lib/
    │   └── freewill.rb
    ├── test/
    │   └── test_freewill.rb
    ├── README
    ├── Rakefile
    └── freewill.gemspec
于 2013-07-25T09:35:37.867 回答
6

我试图模仿 Rails 项目结构,因为我的团队通常与 Rails 打交道,他们会比其他配置更好地理解该结构。约定优于配置 - 从 Rails 流血。

于 2009-03-06T05:32:55.897 回答
2

如果您使用 bundler,运行此命令bundle gem app_name将为您提供相同的目录结构。

如果你想使用 rspec 而不是单元测试,你可以运行这个命令rspec --init (只要确保你cd app_name先)

于 2018-03-16T11:15:51.377 回答