理想的红宝石项目结构

dyl*_*nfm 121 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
Run Code Online (Sandbox Code Playgroud)

我有什么不对吗?我错过了哪些部分?

Chr*_*oyd 87

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

$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
Run Code Online (Sandbox Code Playgroud)

这意味着当你说,surfer.rb在那个目录中,你可以require "surfer"在任何地方找到文件.

此外,作为惯例,类和单例获取文件,模块获取目录.例如,如果你有LolCatz模块和LolCatz::Moar类看起来像:

lib/
  appname.rb
  lolcatz/
    moar.rb
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请注意,您必须[sudo] gem install newgem才能获取newgem命令... (7认同)
  • 您还可以使用bundle生成gem模板.在发表评论时,newgem尚未承诺9个月.命令是`bundle gem gem_name` (5认同)
  • 我没有得到你用`lib`描述的行为自动添加到加载路径.这是1.9件事吗?是否需要任何特殊配置才能实现? (2认同)

Sam*_*les 10

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

 % tree freewill
    freewill/
    ??? bin/
    ?   ??? freewill
    ??? lib/
    ?   ??? freewill.rb
    ??? test/
    ?   ??? test_freewill.rb
    ??? README
    ??? Rakefile
    ??? freewill.gemspec
Run Code Online (Sandbox Code Playgroud)


ber*_*.ab 6

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

  • 如果某个外部开发人员查看您的代码,他/她将看到的只是您的_personal_约定.我认为对于一个中型/大型项目,使用一组用于完全不同类型的项目的约定甚至可能导致更多的混淆.它是一个rails应用程序,一个红宝石应用程序?为什么它的设计类似于rails应用程序?"在我破坏某些东西之前,我最好先和开发者联系......?" 这将从一开始就增加一些开销.. (6认同)