我正在概述/澄清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
我有什么不对吗?我错过了哪些部分?
答案 0 :(得分:85)
我认为这很有意义。默认情况下,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 :(得分:9)
请参阅http://guides.rubygems.org/what-is-a-gem/
中的以下示例 % tree freewill
freewill/
├── bin/
│ └── freewill
├── lib/
│ └── freewill.rb
├── test/
│ └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec
答案 2 :(得分:6)
我试图模仿Rails项目结构,因为我的团队通常会处理Rails,它会比其他配置更好地理解结构。约定优于配置 - 从Rails中流血。
答案 3 :(得分:1)
如果您使用bundler,运行此命令bundle gem app_name
将为您提供相同的目录结构。
如果您想使用rspec而不是单元测试,则可以运行此命令rspec --init
(只需先确定cd app_name
)