2009-04-25 5 views
4

J'ai une application Django que je voudrais déployer sur le bureau. J'ai lu un peu à ce sujet et voir que l'one-way est d'utiliser freeze. Je l'ai utilisé avec un succès variable dans le passé pour les applications Python, mais je ne suis pas convaincu que c'est la meilleure approche pour une application Django.Quelles sont les méthodes efficaces pour déployer une application Django sur le bureau?

Mes questions sont les suivantes: quelles méthodes avez-vous utilisées pour déployer des applications Django? Existe-t-il une méthode standard de facto? Avez-vous atteint des impasses? J'ai besoin d'une solution multi-plateforme.

+0

Peut-être que vous avez choisi le mauvais cadre. Django est un framework web. – webjunkie

+0

C'est pourquoi j'ai demandé à propos du déploiement sur le bureau - assez évident comment le déployer sur le web ... Le fait est, c'est un framework web qui fonctionnerait bien comme un framework de bureau, repoussant les limites est la façon dont nous accomplissons nouvelles choses. –

Répondre

5

Je l'ai fait il y a quelques années pour une application Django fonctionnant en tant que démon local. Il a été lancé par Twisted et enveloppé par py2app pour Mac et py2exe pour Windows. Il y avait à la fois un navigateur et un front-end Air. Cela a plutôt bien fonctionné, mais je n'ai pas pu le déployer dans la nature parce que le projet plus important a été reporté. Il a été un certain temps et je suis un peu rouillé sur les détails, mais voici quelques conseils:

  • IIRC, la chose la plus problématique était des extensions C de chargement Python. J'avais un module assembleur Intel écrit avec des commandes C "asm" que je devais charger pour obtenir des données système de bas niveau. Cela a pris du temps pour travailler sur les deux plates-formes. Si vous le pouvez, essayez d'éviter les extensions C.

  • Vous aurez certainement besoin d'un installateur. Il est probable que l'application finira par s'exécuter en arrière-plan. Vous devrez donc la marquer en tant que service Windows, démon Unix ou application de lancement Mac. Dans votre installateur, vous voudrez trouver un moyen de localiser un port TCP local libre. Vous devrez peut-être écrire une petite routine de remplacement que le programme d'installation exécute ou utiliser la fonctionnalité de script intégrée du programme d'installation pour trouver un port qui n'a pas été pris et l'enregistrer dans un fichier de configuration. Vous chargez ensuite le fichier de configuration dans votre fichier settings.py et dans le frontal que vous allez déployer. C'est le port partagé. Ou vous pouvez juste choisir un nombre aléatoire et espérer qu'aucun autre service sur le bureau ne marche sur vos orteils :-)

  • Si vos serveurs frontaux et principaux sont des applications distinctes, vous devrez concevoir une API pour eux de se parler. Assurez-vous de fournir un indicateur pour renvoyer les données sous forme brute et sous une forme lisible par l'utilisateur. Cela aide vraiment dans le débogage. Si vous voulez que Django puisse envoyer des notifications à l'utilisateur, vous voudrez intégrer quelque chose comme Growl ou obtenir des extensions Python pour Windows pour pouvoir afficher des notifications pop-up sur le grille-pain. Vous voudrez probablement vous en tenir à SQLite pour la base de données, auquel cas vous voudrez vous assurer que vous utilisez des sémaphores pour gérer plusieurs requêtes rivalisant pour la base de données (ou toute autre ressource partagée).Si votre application est accessible via un navigateur, les utilisateurs peuvent avoir plusieurs fenêtres ouvertes et accéder à l'application en même temps. Si vous utilisez un frontal personnalisé (natif, Air, etc ...), vous pouvez contrôler le nombre d'instances en cours d'exécution à un moment donné afin de ne pas poser de problème. Vous aurez également besoin d'une sorte d'accès aux installations de journalisation du système local puisque l'application sera exécutée en arrière-plan et assurez-vous de piéger toutes vos exceptions et de l'acheminer dans le journal syslog. Un gros problème était le débogage des problèmes de démarrage du service Windows. Cela aurait été impossible sans la journalisation du système.

  • Faites attention aux chemins codés en dur si vous voulez rester multiplate-forme. Vous devrez peut-être compter sur le programme d'installation pour écrire une entrée de fichier de configuration avec le chemin d'installation réel que vous devrez charger au démarrage.

  • Tester le déploiement réel, en particulier à travers une variété de pare-feu. Certains pare-feu de bureau sont assez agressifs pour bloquer l'accès aux services réseau qui acceptent les demandes entrantes.

C'est tout ce que je peux penser. J'espère que cela aide.

3

Si vous voulez une bonne solution, vous devriez renoncer à la multiplier. Votre code devrait être portable, mais votre déploiement - presque par définition - doit être spécifique à la plate-forme.

Je recommanderais d'utiliser py2exe sous Windows, Mac OS X sur py2app, et la construction deb paquets pour Ubuntu avec un fichier .desktop au bon endroit dans le package pour une entrée à apparaître dans le menu de l'utilisateur. Malheureusement, pour la dernière option, il n'y a pas de 'py2deb' ou 'py2xdg' pratique, mais il est assez facile de créer le fichier texte approprié à la main.

Et bien sûr, je recommanderais de regrouper dans Twisted as your web server pour rendre l'application facilement autonome :).

+0

Merci pour les notes. C'était utile - j'ai donné la réponse à l'autre gars parce qu'il a utilisé beaucoup de mots :) –

Questions connexes