理想的红宝石项目结构

时间:2009-03-05 10:52:11

标签: ruby project-structure

我正在概述/澄清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 个答案:

答案 0 :(得分:85)

我认为这很有意义。默认情况下,Rubygems会将lib目录添加到加载路径,但您可以使用$:变量将所需的任何目录推送到该目录。即。

$:.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文件和所有脚本内容。

答案 1 :(得分:9)

请参阅http://guides.rubygems.org/what-is-a-gem/

中的以下示例
 % tree freewill
    freewill/
    ├── bin/
    │   └── freewill
    ├── lib/
    │   └── freewill.rb
    ├── test/
    │   └── test_freewill.rb
    ├── README
    ├── Rakefile
    └── freewill.gemspec

答案 2 :(得分:6)

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

答案 3 :(得分:1)

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

如果您想使用rspec而不是单元测试,则可以运行此命令rspec --init (只需先确定cd app_name