2009-09-08 14 views
3

Afin de redéployer une application GAE, je dois actuellement installer les outils de déploiement GAE sur le système que j'utilise pour le déploiement. Bien que ce processus soit relativement simple, le processus de déploiement est un processus manuel qui ne fonctionne pas derrière un pare-feu et les outils de déploiement doivent être installés sur chaque machine qui sera utilisée pour mettre à jour les applications GAE. Une solution plus idéale serait de pouvoir mettre à jour une application GAE à partir d'une autre application GAE que j'ai déployée précédemment. Cela supprimerait le besoin d'avoir plusieurs systèmes configurés pour déployer des applications.Est-il possible de déployer une application GAE à partir d'une autre application GAE?

Étant donné que les outils de déploiement de GAE sont écrits en Python et que GAE App Engine prend en charge Python, est-il possible de modifier appcfg.py pour qu'il fonctionne à partir de GAE? Le cas d'utilisation consisterait à extraire un projet de GitHub ou d'un autre référentiel en ligne et à mettre à jour une application GAE à partir d'une autre application GAE. Si ce n'est pas possible, quelle est la contrainte limitante?

+2

Je ne peux m'empêcher de penser à ceci: http://www.penny-arcade.com/comic/2009/5/18/ – Kip

Répondre

5

Est-ce possible? Oui. Le protocole appcfg utilisé pour mettre à jour les applications est entièrement basé sur HTTP, donc il n'y a absolument aucune raison pour que vous ne puissiez pas écrire une application capable de déployer d'autres applications (ou de se redéployer - code auto-modifiable)! Vous pouvez même être en mesure de réutiliser de grandes parties d'appcfg.py pour le faire.

Est-ce facile? Probablement pas. Il est fort probable que vous ayez besoin de comprendre un morceau décent des composants internes d'appcfg, et les RPC qu'il utilise pour télécharger de nouvelles applications - pas une entreprise triviale. Vous aurez également besoin de stocker vos informations d'identification dans l'application, selon toute probabilité - bien que vous puissiez utiliser un compte de rôle qui est et admin uniquement pour les applications qu'il déploie pour réduire les risques là-bas.

+0

Qu'en est-il de: "... pour tirer un projet de GitHub ou d'un autre référentiel en ligne et mettre à jour une application GAE .." partie? Tandis qu'il est possible de tirer par programme depuis le VCS, vous ne pouvez pas stocker de fichiers dans GAE. Ainsi, l'option serait soit de les garder en mémoire, soit de les stocker. Ensuite, vous devez non seulement modifier l'appcfg t pour l'authentification, mais aussi pour l'extraction de db, la transformation en quelque chose de significatif et le téléchargement. – OscarRyz

+0

Vous pouvez extraire et télécharger un fichier à la fois pour la nouvelle version de l'application. Il n'est pas nécessaire de les récupérer et de les stocker tous. Seuls les fichiers modifiés doivent également être téléchargés, ce qui réduit le nombre d'opérations requises. –

2

Une contrainte limitative pourrait être le protocole que python sdk utilise pour communiquer avec les serveurs GAE. Si seulement il utilise HTTP, vous pourriez être OK. mais si c'est autre chose, vous pourriez ne pas avoir de chance car vous ne pouvez pas ouvrir une socket directement à partir de GAE.

+1

C'est HTTP.* texte supplémentaire SO demande de faire mon message assez longtemps * –

0

Quel problème avez-vous eu en essayant de mettre à jour derrière un pare-feu?

J'en ai, mais finalement je parviens à les contourner. A propos de votre question, la contrainte est que vous ne pouvez pas écrire des fichiers dans une application GAE, donc même si vous pourriez tirer du VCS, vous ne pouvez pas écrire ces fichiers.

Donc, vous devriez mettre à jour de l'extérieur du GAE en premier lieu.

Quoi qu'il en soit, chaque machine qui doit mettre à jour le GAE devrait avoir le SDK de toute façon juste pour voir si elles changent de travail.

Donc, si vous voulez vraiment faire, vous avez deux possibilités:

  1. hébergez votre propre « updater » le site et Ibloq le SDK il, lorsque vous voulez mettre à jour se connecter à vos côtés (ou exécutez un script) et effectuez la mise à jour à distance.

  2. Bien que je ne connaisse pas bien Amazon EC2, je pense que vous pouvez faire à peu près la même chose que l'op 1 à partir de là.

Enfin, je pense que le mot de passe à mettre à jour doit toujours être tapé. (vous pourriez avoir le SDK du moteur App et le modifier, car il est open source)