Je suis actuellement en train de travailler sur un des Rails de 3 projet est divisé en quatre parties:
- Le site web
- L'administration de site web/backend
- Les modèles
- L'API pour les données de tiers l'accès
Les modèles sont partagés entre les trois éléments clés je veux les garder loin de l'être dans un projet principal, cependant, chaque partie doit avoir accès à des modèles, mais je ne veux pas répéter le code et avoir des versions différentes de partout.
Actuellement, j'ai le modèle de code dans un bijou, et chaque projet Gemfile je suis de référencement avec la ligne suivante:
gem "my_models", :path => "../my_models/"
Cependant, quand je déployer pour nos serveurs de test pour mes collègues pour évaluer le système sur j'ai besoin de tirer sur les modèles à partir d'un référentiel externe, donc je change la ligne ci-dessus par le suivant:
gem "my_models", :git => "git@private.repository.com:username/my_models.git"
Cela en lui-même fonctionne bien, mais il est assez maladroit en termes de "versions" (c'est à dire j'ai besoin de les remonter à la version à chaque fois que je souhaite déployer les modifications sur les serveurs de test), interrupteur de la ligne de plus à l'utilisation de git, et non local, et assurez-vous que je repousse correctement les fichiers.
Auparavant, j'étais partagé un git sous-module, mais c'était juste comme maladroit.
Je préfère ne pas construire le tout dans un méga-projet, que ceux-ci tendent à devenir monstrueux et difficiles à maintenir, et je tiens également à d'autres questions, si possible, afin que toutes les modifications que je fais sur le site de l'administration n'a pas beaucoup de chance d'impact sur les autres composantes - de toute évidence, les modèles ont le potentiel de causer des problèmes, mais c'est un risque que j'ai considéré et à comprendre.
Ce serait des gens suggèrent quand il s'agit de quelque chose comme cela? Ou, suis-je aller à ce sujet complètement dans le mauvais sens?
Quelques informations supplémentaires:
Cette application est une réécriture d'un site existant qui a suivi le modèle de "forfaitaire tout en un seul projet" - malheureusement, il y a deux problèmes ici:
- L'application a été mal développé - j'ai hérité de ce projet et quand j'ai d'abord pris le temps de chargement ont été ~2 minutes par page, avec un seul utilisateur, ce qui a depuis été réduit, mais encore a des problèmes tout au long de
- Nous sommes actuellement à notre limite de capacité du site en cours et nous prévoyons que nous aurons besoin de prendre plus de charge dans les 6 prochains mois - cependant, la mise à l'échelle avec un "tout en un" app signifie que nous allons être de gaspiller des ressources sur l'échelle le back-end du site qui n'en a pas besoin.
Il y a essentiellement deux choses que je tiens à séparer l'extrémité Avant (le site web public et de l'API) et l'extrémité arrière - tout ce que je sais sur le développement logiciel me dit que la combinaison de tout cela n'est pas une solution idéale (et du passé, me montre que la séparation de ces deux est une bonne chose en termes de garantie avant la fin de la performance).
J'ai peut-être besoin de regarder cela d'un autre angle de garder les modèles de chaque projet, et au lieu de les partager entre les projets ont un coupe-bas sous-ensemble de fonctionnalités pour chaque domaine fonctionnel (c'est à dire le backend a besoin de savoir qui a créé un poste, mais l'avant n'a pas vraiment de soins à ce sujet, afin de omettre ce logique lors de la lecture dans le modèle).