Anulación de código y multiusuario con Rails

Estoy a punto de construir un multi Alquiler aplicación con Ruby On Rails. Cada cliente tendrá su propia configuración personalizada a través de un archivo YAML (o eventualmente algo almacenado en la base de datos, lo que funcione). Dado el proceso de venta y la cantidad de configuración necesaria para cada cliente, el equipo de desarrollo creará los archivos de configuración. El número esperado de clientes es menos de 100.

¿Cómo anula el código (controladores, vistas, diseños) para clientes específicos (es decir, un módulo por cliente?) ¿Cómo se puede hacer esto dentro de Rails?

preguntado el 22 de mayo de 12 a las 14:05

¿Has considerado darle a cada cliente su propia aplicación y base de datos? eso sería fácil de implementar y escalar (por cliente) en heroku -

@Seamus Asbhere No estoy realmente preocupado por la escala para esta aplicación específica. Con el mercado objetivo, no hay forma de que tengamos un problema de escala. E incluso si lo hiciéramos, podríamos particionar la base de datos fácilmente. Para la división de la base de código, creo que eso también tendría que mantenerse, ¿no crees? -

podría ejecutar a todos en implementaciones separadas de una rama maestra hasta que cualquier cliente necesitara una personalización. crearía una sucursal para ese cliente. luego, podría fusionar periódicamente el maestro nuevamente en cada rama personalizada. eso parece más sólido que poner múltiples personalizaciones de clientes dentro de los modelos, controladores, vistas, etc. -

2 Respuestas

Puede tener módulos para cada cliente y dentro de sus controladores puede solicitar dinámicamente el módulo correspondiente. Suponiendo que tiene una instancia de current_user, en ApplicationCOntroller puede tener before_filter que carga una variable de instancia @client_module y esa variable se puede usar dentro de sus controladores para extender su controlador. Probablemente querrá hacer un módulo por cliente por controlador para hacer la vida más fácil

contestado el 22 de mayo de 12 a las 16:05

¿Qué tal hacer esto con las rutas?

    get ":client/:controller/:action/:id"

ESTUDIO enrutamiento desde afuera hacia adentro para obtener algunas ideas de recursos y espacios de nombres.

contestado el 22 de mayo de 12 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.