2012-10-04 21 views
10

Estoy desarrollando un motor de rieles, y por eso me he tomado algunas miradas sobre los ya existentes. Me di cuenta de que muchos de ellos tienen archivos en app, sino también en lib y vendor.Rieles Motores: Al poner el código en la aplicación, cuando en lib, y cuando en la carpeta de proveedor?

Es claro para mí que debo poner cualquier código que debe ser reemplazada por la aplicación host en la carpeta app (por ejemplo, al tener un modelo app/user.rb, la aplicación host puede fácilmente tener su propio archivo app/user.rb y utilizar éste en lugar de el del motor uno).

Pero no estoy seguro, cuando tengo que poner cosas en lib, y cuando en vendor? Pensé que en el vendor, solo debería poner el código "externo" de otros desarrolladores o proyectos, que quiero usar en mi proyecto, y en el lib puse mis propias bibliotecas adicionales en las que estoy trabajando en el proyecto. Pero, ¿por qué, por ejemplo, WiceGrid coloca cosas en su directorio wice_grid/vendor/assets? No se parece a mí como código externo, pero el código que se desarrolla sólo para WiceGrid y por lo tanto debe estar en el directorio lib?

actualización

Al experimentar un poco, me di cuenta de que todo el código en la carpeta lib no se vuelve a cargar mientras se desarrolla el motor (supongo que la misma es el caso para el directorio vendor), por lo que debe poner en una carpeta dentro de app, pero ¿dónde exactamente?

Por ejemplo, tengo un archivo lib/iq_list_controller.rb que contiene algunos métodos de clase e instancia para ApplicationController la que mezclo en ella en engine.rb así:

initializer "wice_grid_railtie.configure_rails_initialization" do |app| 
    ActiveSupport.on_load(:action_controller) do 
    extend IqList::Controller::ClassMethods 
    include IqList::Controller::InstanceMethods 
    end 
end 

¿Dónde debo poner este fichero para que Rubí se encuentra correctamente?

Respuesta

6

En cuanto al desarrollo de recarga cuestión, si la carpeta de la liberación es un lugar natural para sus archivos, a continuación, agregarlo a la ruta de carga de Rails con algo como:

module MyEngine 
    class Engine < ::Rails::Engine 
    config.autoload_paths << File.expand_path("../../lib", __FILE__) 
    end 
end 

En cuanto al caso específico de los activos de los proveedores, se parece razonable colocar los activos de su motor en la aplicación/activos, donde los encontrará la aplicación Rails de host.

2

si quieres que las cosas sean cargados automáticamente a continuación, los pusieron en /app. De lo contrario, creo que cualquier cosa en /lib debe ser requerida manualmente. Generalmente creo que cargar automáticamente la carpeta lib es una mala práctica.

1

su código básico para MVC viene en la carpeta de aplicaciones. Ahora suponga que tiene un método/módulo genérico que se usa con frecuencia, para implementar DRYness para su código ... todas las utilidades genéricas y comunes pueden simplemente colocarse en la carpeta lib .

theres una hermosa explicación when to use lib y using lib folder in rails

Cuestiones relacionadas