J'écris une application web dans web.py (une réécriture/extension de mongs) que je veux fonctionner à la fois comme une application autonome, et comme une sous-application que les demandes peuvent être transmises à. Le problème que j'ai est que lorsqu'il est utilisé comme une sous-application, les fichiers statiques ne peuvent pas être facilement servis à partir de son propre répertoire statique. Depuis que je l'intention de distribuer ce (et non obliger les utilisateurs à combiner les fichiers dans leur répertoire de projet statique) Je veux que la structure de répertoire à:Servir des fichiers statiques de sous-application dans web.py
app_that_is_using_mongs (not mine)
static (which holds the app's static files - also not mine)
mongs (my subapp)
main.py (the code for mongs)
view (holds templates)
static (the static folder for mongs)
main.py (the code for the app that is using mongs)
... de sorte que tout le répertoire mongs est séparé de quelque application l'utilise.
J'ai examiné quelques possibilités pour obtenir que cela fonctionne:
l'aide d'un gestionnaire de requêtes qui lit et envoie les fichiers du répertoire statique, comme:
cwd = os.path.dirname(__file__) + '/' # get current working directory class Static: def GET(self, filename): """searches for and returns a requested static file or 404s out""" try: return open(cwd + 'static/' + filename, 'r').read() except: web.application.notfound(app) # file not found
Je ne suis pas sûr de la performance de cette solution pour les gros fichiers, et il semble que cela devrait être quelque chose que web.py peut faire par lui-même.
Ajouter un autre répertoire statique en accédant à l'outil staticdir de cherry.py par web.py ... Je ne sais pas comment faire quelque chose comme ceci (interagir directement avec le serveur qui est en cours d'exécution sur Web.py), et je ne pense pas que cela fonctionnerait encore si je passais à un serveur Gunicorn (ou à tout serveur mais cherry.py). Fixer la façon dont web.py gère les fichiers statiques pour le rendre plus extensible ... S'il n'y a pas d'autre moyen, alors réécrire cette partie de web.py et peut-être le pousser dans le repo principal est probablement le meilleur moyen.
Alors, quelle est la meilleure façon de faire cela?
Le répertoire de travail actuel ne sera pas le chemin d'accès à vos fichiers. Sous WSGI, ça peut être n'importe quoi. – Helgi
désolé, cela est défini plus tôt avec 'cwd = os.path.dirname (__ fichier__) + '/' # obtenir le répertoire de travail actuel» (code mis à jour en question) – slang
Oups, désolé. J'ai réussi à manquer ça. Le nom de la variable est un peu trompeur, cependant. :) – Helgi