2011-06-24 19 views
20

¿Cómo puedo convertir el Forum application que he estado desarrollando en un motor de Rails, para que pueda estar integrado dentro de otras aplicaciones?¿Cómo convierto una aplicación Rails 3 existente en un motor?

¿Qué debo agregar, conservar o eliminar? ¿Debo ofrecer una forma de integrar los modelos? ¿Cómo configuro las rutas y la configuración del usuario? ¿Cómo lo paquete en una gema? ¿Qué debería tener cuidado?


Después de leer los artículos y la documentación, logré reducir mis preguntas:

  • ¿Debo espacio de nombres de los modelos? Es decir, ¿debo guardarlos en el módulo de mi motor y en la carpeta app/models/engine?
  • ¿Qué archivos de configuración en config debo tener?
  • ¿Qué pasa con la carpeta public? En Rails 3.1, las hojas de estilo y los javascripts se movieron a la carpeta app/assets, lo que resolvió este problema, pero ¿cómo obtengo el mismo efecto en Rails 3.0?

Respuesta

9

Demasiadas preguntas aquí para responderlas correctamente. Esta es una de esas cosas que pagarán por ti solo por indagar y probarlo. A medida que lo profundice, vuelva y formule nuevas preguntas específicas.

Estos son algunos de los recursos que utilicé cuando hice esto recientemente.

En su mayor parte, puede mantener las cosas en su directorio de aplicación donde se encuentren. También debería poder mantener su routes.rb en el directorio de configuración, pero puede haber algunas trampas si algunas de sus rutas colisionan con las de la aplicación.

Es probable que desee crear un generator para crear una migración que tenga todas las tablas que su motor requiera. Se pueden crear otros generadores para anular las vistas predeterminadas y ese tipo de cosas.

Crea una aplicación de prueba que use tu gema. Muchos de los problemas con los que se encontrará son asegurarse de que está cargando las dependencias de su motor correctamente. Mientras se encuentra en desarrollo, edite el Gemfile de la aplicación de prueba para que apunte directamente a la fuente de su joya ... algo como esto:

gem 'my-forum', :path => '~/work/my-forum' 

namespacing

Al menos debe asignar nombres a las tablas/modelos para que no se encuentre con colisiones de nombres. En cuanto a su aplicación de foro actual, al menos prefijo todas sus tablas con 'forum_'. Es bastante probable que alguien que use su motor tenga un modelo diferente llamado Category por ejemplo ... así que ForumCategory sería una mejor opción.

Definitivamente el espacio de nombre de cualquier clase que cree en el directorio lib.

archivos Config

Usted querrá mantener su routes.rb en el directorio config. Es posible que también deba mantener sus inicializadores también. Cualquier cosa específica de la aplicación probablemente deba ser movida a otra parte.

Archivos Públicos

con rieles 3.0.x, se puede mantener hojas de estilo y archivos JavaScript en el directorio público. Creo que hay un poco de código que necesita agregar a su clase Engine aunque ...

initializer "static assets" do |app| 
    app.middleware.use ::ActionDispatch::Static, "#{root}/public" 
end 
+0

¡Gracias! Después de estudiarlo y probarlo, logré reducir mi lista de preguntas. Sin embargo, hay cosas que todavía no he descubierto. Actualicé mi pregunta, por favor eche un vistazo. –

+0

He hecho algunas adiciones, pero realmente debería comenzar una nueva pregunta sobre el desbordamiento de la pila si necesita más detalles. –

Cuestiones relacionadas