2012-04-29 16 views
8

Tengo una aplicación Sinatra que responde a las llamadas de API, y una aplicación de Rails que maneja los informes y todas las cosas bonitas como los gráficos y el sitio web. Ambos necesitan tener acceso a un conjunto común de modelos (por ejemplo, cuentas, sitios, etc.)Compartiendo el código del modelo entre Sinatra y Rails

Mi problema es: ¿cómo comparto el código de manera eficiente entre las dos aplicaciones? Por ejemplo, si estoy editando el modelo de Cuentas en Sinatra, no quiero tener que recordar duplicar los mismos cambios en la aplicación Rails. Prefiero no usar el montaje Rails Rack ya que las dos aplicaciones estarán en clústeres separados.

que he visto en StackOverflow sugerencias sobre: ​​

  • Módulos Git
  • enlaces simbólicos (no funcionará con Windows que utiliza mi colega)
  • Rieles plugins (dudo que esto funcionaría con Sinatra)
  • gemas de rubí (creo que esto es demasiado excesivo para sólo los datos del modelo, pero eso es sólo conmigo)

Las dos aplicaciones una re en diferentes repositorios. Básicamente, primero estoy desarrollando la API y luego agrego la lógica específica de la Cuenta más adelante en la aplicación Rails (principalmente porque Rails tiene muchas más bibliotecas que facilitan el desarrollo de este tipo de cosas).

¿Cómo resolvería este problema?

+0

¿Las aplicaciones están en el mismo repositorio o en otras diferentes? –

+0

Están en repositorios diferentes :) ¿Recomendarías que estén en el mismo repositorio entonces? – parasquid

+1

No, solo me preguntaba, ya que las opciones cambian un poco dependiendo. Personalmente, creo que los módulos de git o una gema privada son las mejores opciones. –

Respuesta

4

Iré por una gema, o más bien algo parecido a una joya, no es necesario que la publique, y luego use Bundler git dependencies. Hacemos esto mucho en Travis CI y funciona muy bien, especialmente con las nuevas dependencias git "locales" en Bundler 1.2: http://gembundler.com/man/bundle-config.1.html#LOCAL-GIT-REPOS

+0

Solo para aclarar, eso significa que tendré que extraer las similitudes entre las dos aplicaciones en la gema, ¿verdad? Si ese es el caso, ¿sabrá usted de algún repositorio que pueda inspeccionar y aprender que utilice esta técnica? :) – parasquid

+0

Sí, eso es lo que quise decir. Una alternativa sería tener la aplicación Sinatra y la aplicación Rails en el mismo proyecto, o hacer que la aplicación Sinatra cargue la aplicación Rails. Consulte https://github.com/travis-ci/travis-core para ver un ejemplo. –

+0

Ya veo, muchas gracias! :) – parasquid

Cuestiones relacionadas