ruby-on-rails - official - ruby on rails software
¿Cómo convierto una aplicación Rails 3 existente en un motor? (1)
¿Cómo puedo convertir la aplicación Forum que he estado desarrollando en un Motor de Rails, para que pueda integrarse dentro de otras aplicaciones?
¿Qué debo agregar, guardar o eliminar? ¿Debo ofrecer una forma de integrar los modelos? ¿Cómo configuro las rutas y la configuración del usuario? ¿Cómo lo empaco en una gema? ¿Qué debo vigilar?
Después de leer los artículos y la documentación, logré reducir mis preguntas:
- ¿Debería poner espacios de nombres a los modelos? Es decir, ¿debería guardarlos en el módulo de mi Motor y en la carpeta de
app/models/engine
? - ¿Qué archivos de configuración en la
config
debo guardar? - ¿Qué pasa con la carpeta
public
? En Rails 3.1, las hojas de estilo y los javascripts se movieron a la carpeta deapp/assets
, que resolvió este problema, pero ¿cómo logro el mismo efecto en Rails 3.0?
Demasiadas preguntas aquí para responderlas todas adecuadamente. Esta es una de esas cosas que se verá recompensada con solo cavar y probarla. A medida que profundice en él, regrese y haga nuevas preguntas específicas.
Estos son algunos de los recursos que utilicé cuando hice esto recientemente.
- http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/
- http://www.themodestrubyist.com/2010/03/16/rails-3-plugins---part-3---rake-tasks-generators-initializers-oh-my/
- http://pragprog.com/titles/jvrails/crafting-rails-applications
- http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
En su mayor parte, puede mantener las cosas en su directorio de aplicaciones donde están. También deberías poder mantener tus routes.rb
en el directorio de configuración, pero puede haber algunos errores si algunas de tus rutas chocan con las de la aplicación.
Es probable que desee crear un generator
para crear una migración que tenga todas las tablas que requiere su motor. 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á se aseguran de cargar correctamente las dependencias de su motor. Mientras esté en desarrollo, edite el Gemfile de su aplicación de prueba para que apunte directamente a la fuente de su gema ... algo como esto:
gem ''my-forum'', :path => ''~/work/my-forum''
Espacio de nombres
Al menos debe nombrar sus tablas / modelos para que no se tope con colisiones de nombres. En cuanto a su aplicación de foro actual, al menos prefijo todas sus tablas con ''forum_''. Es muy 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, espacio de nombres de cualquier clase que cree en el directorio lib.
Archivos de configuración
Querrás mantener tus routes.rb
en el directorio de configuración. Es posible que también necesite mantener sus inicializadores alrededor también. Cualquier cosa específica de la aplicación tendrá que moverse en otro lugar.
Archivos públicos
Con Rails 3.0.x, puede mantener las hojas de estilo y los javascripts en el directorio público. Creo que hay un poco de código que necesitas agregar a tu clase de Engine
aunque ...
initializer "static assets" do |app|
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end