rails generate example commands ruby-on-rails ruby rake

ruby-on-rails - generate - ruby on rails rake



¿Dónde debería vivir mi código no modelo/no controlador? (2)

./lib es definitivamente el lugar para ir.

Otro lugar para poner esto es en el directorio de inicializadores bajo config, dependiendo de lo que está haciendo. También podría considerar convertir todo en un complemento, pero si se trata de una pequeña cantidad de funcionalidad, probablemente no valga la pena.

Escribí una aplicación de rieles que sigue la estructura de directorio normal (código de modelo en modelos, código de controlador en controladores).

Pero ahora estoy trabajando en una nueva característica y para eso he escrito algo (lo que yo llamaría) código de "servicio".
La nueva característica es importar algunos datos en el sistema, en este momento son dos clases para hacer la importación, pero podría expandirse a más.

No creo que el nuevo código pertenezca al modelo, ya que no está modelando ningún objeto (tampoco está directamente relacionado con ningún objeto). Ciertamente, tampoco creo que pertenezca al controlador, ya que no es lógica de presentación.

Entonces, he creado un directorio de "aplicaciones / servicios" y lo coloqué allí. También creé un directorio de "pruebas / servicios" donde hice mis pruebas.

Todo bien y bien, pensé, pero cuando ejecuto ''rake: test'' o ''autotest'' mis nuevas pruebas de servicios no se ejecutan.
Ahora espero que haya una manera de hacer que Rake los recoja, pero ¿es esto una señal de advertencia de que he hecho algo mal?
¿Hay algún otro lugar donde el código debería vivir o de alguna manera no estoy haciendo las cosas "a la manera de Rails"?

En general, cada vez que encuentro un problema como este, generalmente encuentro que los rieles ya tienen una solución, pero no estaba al tanto de la convención. ¿Es este uno de esos casos?


Esto es para lo que es la carpeta ''lib''.

La carpeta lib está en la ruta automáticamente buscada, por lo que puede tener

class MyFoo end

en lib/my_foo.rb y luego simplemente llamando

MyFoo.new

desde un controlador, el código se cargará sin necesidad de un require ''my_foo''