[PYTHON] Déployez la page de gestion en production pour faciliter la maintenance.

Ohashi est impatient de voir deux calendriers de l'Avent le même jour.

Je touche GAE / Py au travail depuis deux ans. Jusqu'à présent, j'ai touché GAE / J et GAE / Go, et comme c'est GAE / Py qui revient à l'origine, j'ai beaucoup de choses à penser, mais après tout GAE est merveilleux, je pense que je n'utilise plus SQL. , Je pense que je n'aurais pas dû forcer cette application dans un magasin de données tous les jours.

En passant, si vous créez et exploitez un service avec GAE, vous voudrez souvent jouer directement avec le magasin de données. Comment allez-vous dans un tel cas?

Je pense qu'il existe à peu près les méthodes suivantes.

  1. Modifier avec Datastore Viewer de Cloud Console
  2. Hit du client via l'API distante
  3. Déployez et atteignez le lot de correctifs

Aucune de ces méthodes n'est mauvaise, mais chacune a ses propres problèmes et peut être douloureuse.

Cette fois, je voudrais écrire sur google.appengine.ext.admin.application qui a résolu les problèmes 1, 2 et 3.

La douleur de la modification des données dans le magasin de données

Ce qui suit est juste d'écrire diverses rancunes, donc je pense que vous n'avez pas à le lire.

Lors de la modification avec Datastore Viewer de Cloud Console

La visionneuse du magasin de données Cloud Console a été considérablement mise à jour pour vous permettre de mettre à jour les données dans de nombreux cas. Cependant, si vous utilisez ndb avec GAE / Py, ou si vous utilisez votre propre bibliothèque, Goon, etc., si vous mettez à jour directement avec Datastore Viewer, il y a un problème en ce que ** les données Memcache ne sont pas mises à jour **. ..

Lorsque vous rencontrez ce problème, il est difficile de le remarquer, et il existe souvent des différences entre Memcache et Datastore qui peuvent entraîner des échecs.

Dans certains cas, il est nécessaire d'effacer tous les Memcache, ce qui est assez ennuyeux.

Hit du client via l'API distante

En utilisant l 'API distante App Engine, vous pouvez exécuter directement le code ci-dessous sur votre propre PC.

Vous pouvez également interagir avec App Engine comme iPython en utilisant Remote API Shell.

 >>> from google.appengine.ext import ndb
 >>>
 >>> # Fetch 10 keys from the datastore
 >>> ndb.Query().fetch(10, keys_only=True)

C'est assez pratique, mais lors de l'écriture d'un processus qui nécessite un échange de données fréquent, tous les appels RPC tels que l'acquisition et l'écriture de données sont une communication HTTP du client vers le serveur AppEngine, ce qui est très lent. Il ya un problème.

De plus, il est ennuyeux qu'une requête HTTP soit envoyée une fois par appel RPC dans le journal.

Déployer et atteindre le lot de correctifs

Lors de l'ajout de propriétés à des données de modèle à grande échelle, une TaskQueue appropriée peut être créée et traitée à la fois.

Pour être honnête, le déploiement est trop gênant, donc je ne veux pas le faire si je le fais en fonctionnement.

Donc google.appengine.ext.admin.application

Serveur Amdmin local

Lors du lancement local de dev_appserver.py


INFO     2016-12-02 08:30:49,546 admin_server.py:116] Starting admin server at: http://localhost:8000

Admin_server.py a été lancé pour, et vous pouvez utiliser la page d'administration en y accédant. Sur la page d'administration, vous pouvez simuler l'état de la banque de données locale, Memcache, la file d'attente des tâches et la réception de courrier.

Il y a quelque chose appelé "Console interactive", qui vous permet d'écrire directement du code Python et d'envoyer et d'exécuter le code au serveur.

Kobito.FlIaob.png

Vous pouvez facilement exécuter le code sans écrire le code dans le fichier dans l'environnement local, et il peut être utilisé pour la maintenance et le débogage.

Exécuter la page d'administration en production

google.appengine.ext.admin.application rend ce serveur d'administration local disponible en production et est inclus dans le SDK AppEngine de Python.

Pour utiliser google.appengine.ext.admin.application, ajoutez une route dans app.yaml.

- url: /adminapplication/.*
  script: google.appengine.ext.admin.application
  login: admin

Assurez-vous d'ajouter login: admin. Si vous oubliez de l'ajouter, n'importe qui pourra exécuter votre code préféré sur votre GAE. Veuillez le faire à vos risques et périls.

Si vous déployez l'application dans cet état, vous pourrez afficher la page Admin avec le chemin attribué.

Kobito.3NQ9jC.png

La raison pour laquelle cela semble un peu différent est probablement parce que l'application sur cette page d'administration est ancienne et n'a pas été mise à jour, seul le côté serveur d'administration a été mis à jour.

Il existe également une "console intractive" sur cette page, où vous pouvez écrire et exécuter du code directement comme vous le feriez dans la version locale.

Kobito.ZGst87.png

Bien sûr, tous les modules et bibliothèques utilisés dans mon application peuvent être utilisés, et ndb etc. fonctionnera sans problème. La maintenance sera très simple!

Résumé et notes

L'utilisation de google.appengine.ext.admin.application facilite grandement la maintenance des services de production. De plus, lorsque vous êtes invité à produire un peu de données avec csv, si vous utilisez une instruction d'impression, etc., elles seront affichées dans la zone de texte sur le côté gauche, vous pouvez donc les extraire facilement d'ici.

Cependant, il y a quelques mises en garde. Premièrement, puisque ce mécanisme est le même qu'un gestionnaire normal, il reçoit la limite normale de 60 secondes et divers délais d'expiration de la même manière. Soyez prudent lors de la mise à jour de grandes quantités de données.

Le second est écrit ci-dessus, mais vous devez faire attention à la sécurité car vous pouvez exécuter n'importe quel code. Assurez-vous de spécifier login: admin

Le troisième est évident, mais si vous écrivez un code bâclé, toutes les données seront perdues, ce qui est pénible. C'est toujours une bonne idée d'avoir un mécanisme en place qui vous permet de l'essayer localement, puis d'exécuter du code, de pointer dessus et de le récupérer.

Quand je le fais, mon cerveau semble disparaître un instant.

Même si quelque chose se produit, nous ne pouvons en assumer la responsabilité, veuillez donc l'utiliser à vos propres risques.

Nous espérons que les opérateurs GAE pourront revenir dans les plus brefs délais.

Recommended Posts

Déployez la page de gestion en production pour faciliter la maintenance.
Facilitez la compréhension de l'affichage des exceptions du module Python
Déployer le didacticiel Django sur IIS ①
La façon la plus simple de faire un flacon
Faciliter l'utilisation de la fonction clic de SikuliX
Conseils pour faciliter la lecture des documents d'audition Python
[Wagtail] Ajouter une page de connexion au projet Wagtail