¿Cómo puedo cortar una aplicación de gran rieles en aplicaciones más pequeñas que trabajan juntos?

StackOverflow https://stackoverflow.com/questions/391033

Pregunta

He trabajado un poco con Django y me gusta bastante su / modelo de aplicaciones del proyecto: se puede construir un proyecto de Django mediante el ensamblaje de una o más aplicaciones de Django. Estas aplicaciones pueden ser autónomo, o algunas aplicaciones pueden ser construidos en la parte superior de otras aplicaciones. Una aplicación puede fácilmente confiar en los modelos de otra aplicación, así como sus controladores (tipos de Django ellos llaman "puntos de vista") e incluso sus puntos de vista ( "plantillas" en la jerga de Django).

Ahora estoy trabajando en una escala relativamente grande de Ruby on Rails proyecto, y me sorprende ver que aparentemente no hay manera fácil de hacer lo mismo en los carriles. Básicamente, en Rails, un proyecto = una aplicación. Nuestro proyecto ha empezado como una enorme aplicación monolítica, y ahora estamos tratando de encontrar la manera de que se dividió en partes más pequeñas.

Por ejemplo, nuestra aplicación actual nos permite gestionar socios y contratos (entre otras cosas). Me gustaría tener una aplicación de "Partners", que administraría nuestros socios (dirección, contactos, etc.) y una aplicación de "contratos" que gestionar nuestros contratos con nuestros socios. La aplicación "contratos" se basaría en la aplicación "Partners" (pero para evitar una dependencia circular, me gustaría que la aplicación "Socios" no tener conocimiento de los "Contratos" app).

Por ahora, veo los siguientes como las principales opciones:

  1. hacen estas aplicaciones se comunican a través de solicitudes REST (cada aplicación actuaría como un servicio web): esto es agradable, pero parece prohibir la reutilización de vistas de otras aplicaciones. Por ejemplo, si la aplicación "Partners" tiene una buena página para mostrar los detalles de una pareja, y si quiero mostrar esa página, ligeramente modificado, en el medio de la página contratos-detalles, no veo otra manera de hacerlo esto que tiene la aplicación "contratos" pedir la aplicación "Partners" para los detalles de los socios a través de una solicitud REST (se obtendrá una representación de objeto, no un punto de vista), a continuación, copiar / pegar el código fuente de la página de socios-detalles de la " socios" de la aplicación a la 'aplicación de los contratos'.
  2. convertir estas aplicaciones en plugins: no es tan agradable, y un poco más difícil, pero parece permitir vistas de modelo y reutilizar
  3. Use SVN externa para compartir algunos modelos de aplicación a aplicación:. Simple pero fea

Gracias por sus consejos.

¿Fue útil?

Solución

Dado que esto es algo que también me gustaría ser capaz de hacer, que puedo ofrecer cuatro - incompleta y relativamente sin probar (por mí) "soluciones":

En ningún orden en particular ...

  1. Utilice los rieles motores plugin, que aparentemente funciona con 2.2 ahora. Esto, a parte o la totalidad medida, probablemente, todo en Rails 2.3 (ver más abajo)

  2. Cambiar a Merb, que tiene algo llamado "cortes" que podría ofrecer lo que estás buscando. De todos modos, si este es correcta (y quién soy yo para dudar Yehuda Katz?) Todo será lo mismo cosa un día de todos modos, que es fresca.

  3. Tome un vistazo a la funcionalidad motores en Edge Rails ( "Edge" es la última versión comprometida pero inédito, por lo que por lo general funciona, pero puede no ser 100% calidad de la producción aún).

  4. Mira en el uso de espacios de nombres en routes.rb - asignar un elemento dentro app que significa un espacio de nombres se puede poner en un subdirectorio dentro del subdirectorio app relevante, aunque esto es tal vez menos limpia para tener un conjunto separado de directorios Rieles para cada "aplicación".

De éstos, no tengo experiencia de (2) porque yo estoy atado (en términos de infraestructura) a los rieles, pero eso está bien, me gusta rieles. Estoy planeando tomar mira (1) y tal vez (3), debido a 2.3 puede ser liberado antes de lo necesario para desplegar mi próximo lanzamiento importante, y he tratado (4), que funciona, pero es, también, más incómoda y un poco (me) confuso.

Otros consejos

Si desea investigar la opción # 2 de Mike, rebanadas Merb hay un screencast sobre el tema que es de gran ayuda .

he utilizado el plugin desierto (anteriormente 'plugins plus'). Parece que funciona bastante bien. http://github.com/pivotal/desert/tree/master

La forma en que lo veo por RoR sería escribir sus "aplicaciones" como controladores de rieles. Pueden ser bastante independiente, pero pueden compartir ayudantes y puntos de vista. No sé Django así que tal vez la terminología es diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top