我正在概述/澄清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目录添加到加载路径,但您可以使用$:变量将所需的任何目录推送到该目录.即
$:.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文件和所有脚本的东西.
请参阅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)将比其他配置更好地理解结构.约定优于配置 - 从Rails中流血.