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
¡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. –
He hecho algunas adiciones, pero realmente debería comenzar una nueva pregunta sobre el desbordamiento de la pila si necesita más detalles. –