¿Cómo construir una plataforma multi-shop en Rails?

Para construir una plataforma de múltiples tiendas en Ruby On Rails, puede haber cuatro enfoques principales. El enfoque que se adapte a sus necesidades depende de los detalles de su caso. Discutiré los cuatro enfoques uno por uno.

1. Aplicación multicliente con base de datos única

Con esta arquitectura, los datos de todas las tiendas se almacenarán en la misma base de datos. Esto requerirá una columna tenant_id única en la mayoría de las tablas. Este enfoque es el más adecuado si todas las tiendas van a tener exactamente la misma estructura de datos. Será difícil escalar las tiendas por separado o satisfacer los requisitos personalizados de tiendas particulares. Se puede escalar con bastante facilidad para manejar una gran cantidad de tiendas.

2. Aplicación multicliente con base de datos múltiple

En este enfoque para todos los inquilinos / tiendas habrá bases de datos separadas pero una sola aplicación ejecutándose sobre ellas. En este enfoque a nivel de aplicación, resolveremos a qué base de datos debemos conectarnos en función del inquilino actual. Este enfoque es más fácil de adaptar con una base de código existente que está diseñada para una sola tienda. Con el aumento en el número de tiendas e instancias de bases de datos, puede ser un poco difícil de administrar.

3. Varios servidores que ejecutan la misma aplicación

Este es el enfoque más simple en el que simplemente ejecutamos varias instancias de la misma aplicación. Cada instancia tendrá su propio servidor de aplicaciones y base de datos. Cualquier cambio nuevo en el código se implementará simultáneamente en todas las instancias utilizando herramientas de implementación como Capistrano.

4. Extracción de funcionalidades en gemas.

En este enfoque, podemos extraer piezas de código principales y comunes en gemas y reutilizar esas gemas en todas las tiendas. Toda tienda puede tener algunas funcionalidades comunes y otras distintas.

Todos estos enfoques tienen sus pros y sus contras. Los tres primeros son adecuados cuando todas las tiendas tienen exactamente el mismo modelo de datos. Una cosa a tener en cuenta es que el código debe estar escrito de manera genérica y no debe contener ninguna información o lógica específica de la tienda. Todas las cadenas y configuraciones deben ser configurables. El último enfoque es adecuado cuando cada una de las tiendas puede tener sus requisitos personalizados.

Obtener una nueva tienda en vivo será más fácil en el primer enfoque y se volverá más difícil a medida que avanzamos hacia el último enfoque. Elija según sus requisitos.

More Interesting

¿Cuánto capital se requiere típicamente para financiar un negocio SaaS, desde el concepto hasta el flujo de caja positivo?

¿La construcción de fachadas de micro servicios en una aplicación SaaS (Salesforce, por ejemplo), rompe el principio de 'usar una base de datos por servicio'?

¿Cuál es la mejor manera de descubrir grandes mercados listos para la disrupción?

¿Cuáles son las mejores herramientas para el desarrollo de realidad aumentada?

¿Qué beneficios proporciona el software CRM a un negocio de agencia?

¿Qué CRM o SaaS utiliza para administrar su comunidad?

¿Las compañías SaaS exitosas tienen oportunidades 'transformadoras' más allá de vender más y más de su producto principal?

¿Cuál es la mejor manera de capacitar y monetizar una red de consultores para una plataforma SaaS?

¿Cómo se ve una propuesta SaaS para clientes empresariales?

¿Debería usar un CMS para un contenido SaaS (páginas de destino, preguntas frecuentes, etc.) o deberíamos usar la aplicación para crear las páginas de contenido allí?

Al crear un plan de marketing para un SaaS, ¿cómo se le ocurre a los compradores con casi ninguna información sobre el tema?

¿Qué sigue después de PowerPoint, en términos de innovación?

¿Qué proveedor de servicios en la nube es ideal para el arranque de arranque que quiere probar aguas?

¿Cuáles son las mejores herramientas gratuitas para startups?

¿Cuáles son las mecánicas de Gamificación más potentes que mantendrán a las personas interesadas, inspiradas y entusiasmadas?