理想的Ruby项目结构


125

我正在对红宝石(无轨/ 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

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


1

Answers:


88

我认为这几乎是正确的。默认情况下,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
甜。我不知道newgem。我的非Rails项目经常镜像Rails结构,因为我发现它很熟悉。感谢您的最佳做法提示。
berlin.ab,2009年

另一个重要文件可能是“许可证”
bluehavana

2
我没有得到您描述的lib自动添加到加载路径的行为。是1.9的东西吗?要实现它,是否需要任何特殊的配置?
艾米丽

5
您还可以使用bundle生成gem模板。在发表此评论时,newgem尚未致力于9个月。命令是bundle gem gem_name
Ninjaxor


6

我试图模仿Rails项目的结构,因为通常与Rails合作的团队会比其他配置更好地了解该结构。约定优于配置-从Rails溢出。


6
如果某些外部开发人员查看您的代码,他/他将看到的只是您的个人习惯。我认为对于中型/大型项目,使用一组针对完全不同类型的项目的约定甚至可能引起更多的混乱。它是Rails应用程序还是ruby应用程序?为什么设计得像Rails应用程序?“在破坏某些东西之前,我最好与开发人员联系……?” 从一开始
就将

我同意@jj_。我知道这有点古老,但我认为让人们理解为什么会有社区惯例很重要。这样一来,您就可以将某人拉到大街上,他们可以看到您的项目并获得破解。这样您就可以查找并理解它。我觉得使用领域的约定很重要。项目配置上的域约定。
WattsInABox 2014年

2

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

如果要使用rspec代替单元测试,则可以运行此命令rspec --init (只需确保cd app_name先执行)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.