2012-05-07 10 views
20

Actualmente estoy creando 2 API con Ruby on Rails. Uno si para leer (encontrar objetos, consultar) y el otro es para escribirle, lo que implica un tipo de proceso complicado con colas y otra API. Ambas aplicaciones requieren exactamente los mismos modelos y lógica dentro de ellas.Compartir modelos entre 2 API Rails (aplicaciones separadas)

Mi pregunta es, ¿cuál es la mejor práctica o enfoque más común para compartir las especificaciones de los modelos (relaciones, ámbitos, métodos) entre 2 aplicaciones de rieles?

¡Gracias!

+0

¿Se puede cambiar el código en ambas API? o hay alguna restricción? –

+0

@NigelThorne Seguramente puedo, ambos son construidos por mí. – Gotjosh

Respuesta

4

La forma en que lo haría es un 'Motor de montaje'. Consulte el excelente Railscast by Ryan Bates para principiantes y el engine-section at api.rubyonrails.org para obtener más detalles.

Con recuerdos, Mandi

+0

Se supone que el Railscast está destinado para nuevas aplicaciones, pero la primera API ya está hecha, además de motores que compartiría controladores y vistas si estoy en lo cierto, que no es mi caso ... – Gotjosh

+2

@Gotjosh Puede extraer sus modelos existentes en el motor (que mejor se empaqueta en una gema). Luego incluye esta gema en tu vieja aplicación y voilà, tus modelos están disponibles. Puedes incluir la gema en cualquier otra aplicación que te guste. Y no, los motores no proporcionan controladores automáticamente.Un motor puede proporcionar cualquiera o todas las piezas de una aplicación Rails, modelos, vistas, controladores, archivos de activos (JS, CSS), etc. Un buen libro sobre esto son las "Aplicaciones de Crafting Rails" de José Valim. –

1

Si lo que desea es compartir modelos, puede agregar la otra carpeta de modelos de proyectos en su ruta de autocarga s:

rails new test1 
rails new test2 
cd test1 
rails g model User 
cd ../test2/ 
# ACTION REQUIRED: edit config/application.rb adding this line 
# inside the class Application < Rails::Application block: 
# 
# config.autoload_paths += %W(#{config.root}/../test1/app/models) 
# 
mkdir db/migrate 
cp ../test1/db/migrate/*_create_users.rb db/ 
mv db/*_create_users.rb db/migrate/ 
rake db:migrate 
rails r 'puts User.inspect' 
#=> User(id: integer, created_at: datetime, updated_at: datetime) 

También puede configurar todo el asunto con el fin de tener las dos app/models carpetas como privado, mediante una tercera carpeta compartida, añadiendo esto a los proyectos:

# config.autoload_paths += %W(/path/to/a/shared/folder) 

Esta carpeta puede incluso no sea la misma carpeta para cada proyecto, por lo que podría ser una ruta a un submódulo de git, por ejemplo (si usa GIT, recomiendo esta solución).

Otra opción podría estar apuntando app/models a una carpeta compartida con un enlace blando

1

Mi truco para hacer esto es en realidad no utiliza trucos Rails. Utilizo trucos de "git" y obtengo el código de un tercer repositorio de código compartido. Puse esto en ambas aplicaciones como un motor, y como una referencia externa de GIT.

Es un poco más de trabajo, pero una vez que lo haya hecho una vez en una aplicación, es fácil de usar como una plantilla para la siguiente, también.

+0

¿No significa eso que tienes que enviar los cambios en una aplicación a Git antes de que puedas verlos en la otra aplicación? ¿Cómo desarrollarías y probarías algo nuevo? ¿Qué quieres decir con "un motor"? – Chloe

Cuestiones relacionadas