Configuration uwsgi.ini pour les applications Python

Je suis donc expérimenté avec uWSGI et j'aime beaucoup.

J'ai cependant une question concernant l'utilisation de son file .ini.

Est-il possible de calculer dynamicment les valeurs de son paramètre de configuration .ini?

Par exemple, pour la valeur "chdir" dans mon file "uwsgi.ini", j'ai

[uwsgi] socket=127.0.0.1:3034 chdir=/Users/calvin/work/myproject virtualenv=/Users/calvin/.virtualenvs/myproject module=django.core.handlers.wsgi:WSGIHandler() env= DJANGO_SETTINGS_MODULE=myproject.settings master=True pidfile=/tmp/myproject-master.pid vacuum=True max-requests=5000 daemonize=/var/log/uwsgi/myproject.log 

Il est assez gênant d'avoir à écrire 3 files .ini séparés pour ma «machine locale», mon server «développement / mise en scène» et mon «server de production». Sans oublier que la valeur de chdir la machine locale d'un collègue sera complètement différente.

J'ai essayé d'utiliser import os et os.join.path pour calculer dynamicment la valeur chdir , mais cela ne fonctionne pas, ce qui est à prévoir puisque uwsgi n'a pas d'interprète python?

3 Solutions collect form web for “Configuration uwsgi.ini pour les applications Python”

J'ai trouvé la réponse moi-même après avoir creusé un peu le document uwsgi.

Référence, http://projects.unbit.it/uwsgi/wiki/ConfigLogic , nous pouvons spécifier la logique de configuration et calculer dynamicment les paths en utilisant des variables d'environnement dans un python virtualenv.

Donc, en supposant que je suis actuellement dans mon myproject virtualenv, ma configuration .ini calculera automatiquement mes paths pour les options de configuration chdir et virtualenv .ini comme ceci:

 [uwsgi] if-env = PROJECT_HOME print = Your path is %(_)/myproject chdir = %(_)/myproject endif = if-env = VIRTUAL_ENV print = Your virtualenv is %(_) virtualenv = %(_) endif = socket=127.0.0.1:3034 module=django.core.handlers.wsgi:WSGIHandler() env= DJANGO_SETTINGS_MODULE=bbox.settings master=True pidfile=/tmp/project-master.pid vacuum=True max-requests=5000 daemonize=/var/log/uwsgi/yourproject.log 

La déclaration d'printing est facultative, mais cela donne à uwsgi les valeurs binarys pour chdir et virtualenv que cela attend.

Quelque chose comme ça:

 calvin$ uwsgi --ini myproject/uwsgi.ini [uWSGI] getting INI configuration from myproject/uwsgi.ini Your path is /Users/calvin/work/myproject Your virtualenv is /Users/calvin/.virtualenvs/myproject *** Starting uWSGI 1.2.4 (64bit) on [Thu Jul 26 17:00:04 2012] *** comstackd with version: 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.61) on 25 July 2012 20:06:56 detected number of CPU cores: 8 

Les relevés imprimés sont inutiles dans votre file final .ini bien sur. Je les mets juste là pour imprimer les informations nécessaires qui confirment que mes paths sont calculés dynamicment dans le file .ini.

Je ne suis pas sûr que ce soit une bonne pratique d'exécuter des versions de développement et de production avec différents files de configuration. Il s'agit généralement d'un problème «étrange» qui n'apparaît pas dans la version dev (en raison de différentes permissions de file ou autre). Beaucoup mieux est de faire du smth comme make install et toujours travailler avec une configuration similaire à la production. Ou, vous pouvez simplement lier vos sources au directory de projet dans votre homedir pour les modifier sur place. Mais encore une fois, votre configuration est unique.

S'appuyant sur la réponse donnée par Calvin, avec l'utilisation de la magie '@', on peut avoir plus de souplesse quant aux configurations dynamics.

Le @(exec://...) peut être utile, par exemple, pour évaluer les commands bash. Dans mon cas, il m'a permis de définir: realpath = @(exec://bash -c 'dirname `readlink -f %p`') je recherchais depuis que j'avais symbolisé cette configuration d'un autre directory.

  • Hébergement Django sur linux - Quelle est la technique la plus efficace en termes de memory?
  • uWSGI backtrace: erreur de défaut de la sémission
  • Effets secondaires du réglage des requêtes maximales sur uwsgi config
  • Comment déployer django avec uWsgi et nginx sur CentOS
  • Serve Flask applications comme les scripts PHP
  • superviseur lance avec un mauvais setuid
  • Django / uWSGI - Nginx donne le code d'état 502: error.log indique "Autorisation refusée"
  • Aucun module nommé OS - NGINX / UWSGI / NGINX
  • Les journaux uWSGI de Python n'ont pas de droits de lecture
  • Pourquoi mes process uWSGI disparaissent-ils immédiatement?
  • Déploiement de l'application Flask avec nginx, uWSGI et virtualenv
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.