【问题标题】:Ideal Ruby project structure理想的 Ruby 项目结构
【发布时间】:2009-03-05 10:52:11
【问题描述】:

我正在对 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

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

【问题讨论】:

标签: ruby project-structure


【解决方案1】:

我认为这几乎是正确的。默认情况下,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 文件和所有脚本内容。

【讨论】:

  • 甜蜜。我不知道newgem。我的非 Rails 项目经常反映 Rails 结构,因为我觉得它很熟悉。感谢您提供此最佳实践提示。
  • 另一个重要的文件可能是“LICENSE”
  • 我没有得到你描述的 lib 被自动添加到加载路径中的行为。这是1.9的东西吗?实现它需要任何特殊配置吗?
  • 你也可以使用bundle来生成gem模板。在发表此评论时,newgem 已经有 9 个月没有承诺了。命令是bundle gem gem_name
【解决方案2】:

http://guides.rubygems.org/what-is-a-gem/下面的例子

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

【讨论】:

    【解决方案3】:

    我试图模仿 Rails 项目结构,因为我的团队通常与 Rails 打交道,他们会比其他配置更了解该结构。约定优于配置 - 从 Rails 流血。

    【讨论】:

    • 如果某个外部开发人员查看您的代码,他/她将看到的只是您的个人约定。我认为对于一个中型/大型项目,使用一组用于完全不同类型项目的约定甚至可能导致更多混乱。它是一个 Rails 应用程序,还是一个 Ruby 应用程序?为什么它被设计成一个 Rails 应用程序? “我最好在我破坏什么之前与开发人员取得联系……?”这将从一开始就增加一些开销..
    • 我同意@jj_。我知道这有点老了,但我认为人们理解为什么会有社区约定很重要。这样您就可以将某人从街上拉下来,他们可以看到您的项目并开始破解。这样你就可以查到一些东西并理解它。我觉得使用领域的约定很重要。域约定优于项目配置。
    【解决方案4】:

    如果你使用 bundler,运行这个命令 bundle gem app_name 会给你相同的目录结构。

    如果你想使用 rspec 而不是单元测试,你可以运行这个命令rspec --init (只要确保你先cd app_name

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2017-12-25
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      相关资源
      最近更新 更多