2009-03-05 20 views
114

Estoy buscando una visión general/aclaración de la estructura de proyecto ideal para un proyecto ruby ​​(non-rails/merb/etc). Supongo que sigue a lo largo de las líneas de:Estructura de proyecto de ruby ​​ideal

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 

¿Tengo algo malo? ¿Qué partes he perdido?

Respuesta

84

Creo que es bastante acertado. Por defecto, Rubygems agregará el directorio lib a la ruta de carga, pero puede insertar cualquier directorio al que quiera utilizando la variable $ :. es decir,

$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff') 

Eso significa que cuando haya decir, surfer.rb en ese directorio, puede require "surfer" en cualquier lugar y el archivo será encontrado.

Además, como una convención, las clases y los singletons obtienen un archivo y los módulos obtienen un directorio. Por ejemplo, si usted tenía el módulo LolCatz y la clase LolCatz::Moar que se vería así:

lib/ 
    appname.rb 
    lolcatz/ 
    moar.rb 

Es por eso que hay una carpeta lib/nombreaplic porque la mayoría de las bibliotecas se encuentran en el espacio de nombres appname.

Además, si intenta ejecutar el comando newgem --simple [projectname] que generará rápidamente un andamio para usted con los elementos esenciales para un proyecto de Ruby (y por extensión, una gema de Ruby). Hay otras herramientas que hacen esto, lo sé, pero newgem es bastante común. Por lo general, me deshago del archivo TODO y todas las cosas del script.

+7

Tenga en cuenta que tendrá que joya [sudo] instalar newgem para obtener el comando newgem ... –

+1

dulce. No sabía sobre newgem. Mis proyectos sin rieles a menudo han reflejado la estructura de Rails porque la he encontrado familiar. Gracias por este consejo de mejores prácticas. –

+0

Otro archivo importante podría ser "LICENCIA" – bluehavana

6

Intento imitar la estructura del proyecto Rails porque mi equipo, que generalmente trabaja con Rails, entenderá la estructura mejor que otra configuración. Convención sobre configuración: desbordamiento de Rails.

+6

Si un desarrollador externo mira tu código, lo que verá será tu convención _personal_. Creo que para un proyecto mediano/grande, usar un conjunto de convenciones para un tipo de proyecto totalmente diferente podría incluso causar más confusión. ¿Es una aplicación de rieles, una aplicación de rubí? ¿Por qué está diseñado como una aplicación de rieles? "Será mejor que me ponga en contacto con el desarrollador antes de romper algo ..." Eso va a agregar un poco de sobrecarga desde el principio. –

+0

Estoy de acuerdo con @jj_. Sé que esto es un poco viejo, pero creo que es importante que la gente comprenda por qué hay convenciones comunitarias. Es para que puedas sacar a alguien de la calle, puedan ver tu proyecto y se quiebren. Es para que puedas buscar algo y entenderlo. Siento que es importante usar las convenciones del dominio. Convención de dominio sobre la configuración del proyecto. – WattsInABox

8

Véase el siguiente ejemplo de http://guides.rubygems.org/what-is-a-gem/

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