理想的ruby项目结构

我总结/澄清了一个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 

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

我认为这是非常重要的。 默认情况下,Rubygems会将lib目录添加到loadpath,但是您可以使用$:variables将所需的任何目录推送到该目录。 即

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

这意味着,如果您在该目录中surfer.rb ,则可以在任何地方require "surfer" ,并find该文件。

另外,作为一个约定,类和单例获得一个文件,模块获得一个目录。 例如,如果你有LolCatz模块和LolCatz::Moar类,看起来像这样:

 lib/ appname.rb lolcatz/ moar.rb 

这就是为什么有一个lib / appname文件夹,因为大多数库都在应用程序名称空间中。

此外,如果您尝试运行命令newgem --simple [projectname] ,那么只需使用Ruby项目(以及扩展Ruby Gem)的基本要素即可快速生成脚手架。 还有其他工具可以做到这一点,我知道,但是newgem很常见。 我通常摆脱TODO文件和所有脚本的东西。

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

  % tree freewill freewill/ ├── bin/ │ └── freewill ├── lib/ │ └── freewill.rb ├── test/ │ └── test_freewill.rb ├── README ├── Rakefile └── freewill.gemspec 

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