2011-10-11 12 views
6

Esto es más para la experimentación, soy consciente de que puedo hacer esto con --full, pero quería la funcionalidad del espacio de nombres en la aplicación para evitar conflictoscarriles 3.1.1 motores: con motores montables, ¿es posible acceder a los recursos de la aplicación principal, diseño predeterminado?

La idea es tener una aplicación principal, que maneje la autenticación, elementos comunes, las pantallas de administración, etc. Entonces la creación de motores para añadir más funcionalidades como

  • CRM
  • cms
  • el blog
  • wiki
  • foro
  • etc

Estos motores que puede escoger y elegir lo que necesito para cualquier tipo de aplicación que estoy construyendo. ¿Esto es posible?

¿Es solo el caso de aplicar las opciones --morable y --full?

experimentando - Habría algún problema si utilizo la opción completa añadir rspec y luego añadir sencilla

rails plugin new plugin_name --skip-test-unit --full --dummy-path=spec/dummy 

y en lib \ PLUGIN_NAME \ engine.rb

module PluginName 
    class Engine < Rails::Engine 

    # this is added by rails when an engine is mountable 
    # to isolate the plugin and prevent name clashes 
    isolate_namespace PluginName 

    # one of the additions to make rspec work from command line for the plugin 
    config.generators do |g| 
     g.test_framework :rspec, :view_specs => false 
    end 
    end 
end 

ya he creado tanto --full como - motores montables y finalmente rspec trabajando para todos los que están leyendo, hay algunos excelentes artículos (ver más abajo), pero me pregunté sobre el impacto más amplio de hacer esto para la solución que estoy tratando de crear

Todavía estoy jugando con esto y publicaré mis hallazgos ..
Cualquier ayuda/discusión será apreciada masivamente.

Por favor Nota

  1. ¿Por qué quiero hacerlo - Construir una vez que utilizar muchas veces ...
  2. No me gustaría un no-tech/cliente para añadir plugins/"motores" - esto es puramente a punto de entretener a 1.

Problemas estoy teniendo ...

  1. Ejecutando el servidor en la aplicación de nivel superior. Solo cuando accedo al contenido del motor (puedo ver por los mensajes de error) tengo un problema de enrutamiento (ruta_de_ruta no definida o intento de rutas faltantes): el diseño de la aplicación principal se está renderizando, puedo verlo en el origen extraído del error . ¡Progreso pero no cigarro todavía!

Referencias útiles

+0

estoy perdiendo algo sumamente obvio aquí ... si copio las rutas de los padres a las rutas de los motores funciona bien para montable ... haciendo lo mismo para --full como se especificó anteriormente las rutas no están funcionando – Spasm

Respuesta

2

me las arreglé para conseguir este funcionamiento con los siguientes pasos:

  1. En mi aplicación padre que estaba montando el motor en routes.rb

    mount PluginName::Engine => '/plugin_name' 
    

    me acaba de quitar la misma.

  2. Creó un controlador de aplicación como Ryan Bigg a continuación había indicado.

    class PluginName::ApplicationController < ApplicationController 
        ... 
    end 
    
  3. Como quería tener cosas nombre espaciadas al generar controladores, modelos, pruebas de lo que tiene que comentar esencialmente el isolate_namespace PluginName lib \ PLUGIN_NAME \ engine.rb cuando quería la gema que se ejecute en el padre aplicación

    Todavía no es una solución ideal. fuera de mi cabeza, podría usar algo como:

    isolate_namespace PluginName if %w[development testing].include?(Rails.env) 
    

    pero tendré que probar si esto es práctico.

Felicitaciones a Ryan para ayudar a encontrar el camino muchas gracias

Por otra parte, el mismo se puede hacer con la versión del interruptor --mountable y todo lo que necesita hacer es un paso más en su configuración de motores/rutasrb reemplazar

PluginName::Engine.routes.draw do 

con

Rails.application.routes.draw do 
+0

Me salvó el culo con esto. Gracias. – codykrieger

1

Sí, puede REFE rencia los activos de aplicaciones padres simplemente haciendo referencia a ellas en su aplicación como normal:

<%= stylesheet_link_tag "application %> 

Aunque, sin saber por qué querría hacer eso porque ...

voy a responder a su primera pregunta con la respuesta a tu segunda pregunta.

Para utilizar el diseño de la aplicación, deberá modificar ApplicationController en el motor (que tiene el espacio de nombres) y hacer que herede de ApplicationController en el motor.

Que luego tendrá los controladores para el motor utilizando el diseño proporcionado por el motor. Soy doing this in my engine, forem.

Un día, esto se cubrirá en the Engines Guide que, en este momento de la escritura, se está escribiendo actualmente.

+0

Gracias por consultarme He leído un buen número de sus publicaciones repartidas por la web. Acceder a los recursos principales solo sería el diseño, pero en mi primer intento de usar montable esto no fue posible ya que son completamente independientes. Es por eso que pensé en usar la opción completa, pero aún así espaciado de nombres heredando la aplicación padre pero espaciando la aplicación. Me pregunté cuáles serían las repercusiones ... revisando forem para reunir información. – Spasm

Cuestiones relacionadas