Estás hablando de 2 enfoques diferentes para desarrollar aplicaciones basadas en navegador:
- Aplicación mono que incorpora backend y frontend en un repositorio / framework. Frontend se representa en controladores Rails (vistas HTML y JS / CSS a través de Asset Pipeline).
- Servidor API Rails separado que solo sirve API RESTful. Y una aplicación AngularJS separada que sirve HTML, JS y CSS.
Aunque # 1 es mucho más fácil de configurar e implementar para alguien que se está familiarizando con el desarrollo web, recomendaría firmemente el uso del enfoque # 2 debido a los siguientes beneficios:
- Diseño impulsado por API. En primer lugar, debe pensar en API, lo que facilitará la introducción de nuevos clientes más adelante: iOS, Android. También ayudará si decide hacer pública su API.
- Desacoplamiento Frontend está completamente desacoplado del backend: no más inyecciones de JavaScript tontas de los controladores Rails y peculiaridades de la tubería de activos. Use herramientas como hilo, paquete web y babel para crear una tubería para construir su aplicación frontend.
- Frontend se puede implementar en el cubo S3. Frontend es esencialmente un conjunto de activos estáticos: archivos HTML, JS y CSS. No tiene que ejecutar el servidor Linux para que estén disponibles para sus usuarios. Puede usar una combinación de bucket S3 y distribución CloudFront para servir su aplicación frontend rápidamente.
- Separación de intereses. Los desarrolladores se especializan naturalmente en diferentes áreas. Es común tener equipos separados trabajando en partes de aplicaciones de backend y frontend. Tenerlos en diferentes repositorios ayuda mucho porque no interfieren entre sí.
- Más escalable La vista de representación en el lado del servidor es computacionalmente costosa. La gente está usando motores de plantillas como Slim (un motor de plantillas rápido y liviano para Ruby) para mejorar eso, pero el problema aún está presente. Descargar el renderizado de vistas a navegadores / clientes móviles ayuda mucho en el escalado.
Algunas desventajas pero con soluciones alternativas:
- ¿Qué código de vestimenta debe usar un ejecutivo de cuentas de campo de SaaS?
- ¿Cómo funciona SaaS cuando un miembro pagado invita a un miembro que no paga a un proyecto? ¿Se le permite al usuario unirse? ¿O debe convertirse en un miembro pagado?
- ¿Qué plataforma podemos usar para administrar a nuestros vendedores?
- Si ejecuto una startup y estoy construyendo mis sistemas (ventas, marketing, soporte, etc.), ¿necesito usar muchas aplicaciones diferentes o hay una mejor manera?
- Cómo crear un software de punto de venta basado en la web
- Es más difícil configurar 2 tuberías de compilación separadas. Pero hay muchos kits de inicio disponibles para simplificar este proceso. Ejemplo: preboot / angularjs-webpack
- Autenticacion de usuario. Con API back-end no se recomienda usar sesiones de navegador. Debe encontrar otro tipo de autenticación, preferiblemente oAuth2. Echa un vistazo a doorkeeper-gem / doorkeeper