Question

J'essaie de déployer un code pyramid sur dotcloud. Malheureusement, certains chemins ne sont pas mappés de la même manière que dans le déploiement de Paster local. Lorsque j'exécute la configuration de développement avec le serveur local via paster serve ..., Je peux accéder aux fichiers statiques configurés dans:

config.add_static_view('static', 'appname:static')

Cependant sur les serveurs dotcloud, lorsque les scripts s'exécutent via ce qui suit wsgi.py:

import os, sys
from paste.deploy import loadapp
current_dir = os.path.dirname(__file__)
application = loadapp('config:production.ini', relative_to=current_dir)

Le contenu statique est recherché dans un mauvais répertoire. À la place de /home/dotcloud/current/static/pylons.css, il devrait regarder dans /home/dotcloud/current/appname/static/pylons.css

Y a-t-il une partie de la configuration WSGI qui peut définir le répertoire de base? Qu'est-ce que je rate? L'application est exécutée via nginx / uwsgi.

J'ai essayé de charger config:../production.ini, relative_to=current_dir + '/appname' Mais cela n'a rien changé.

Était-ce utile?

La solution

Sur dotcloud, URL commençant par /static sont gérés directement par Nginx, pas par UWSGI. Cela signifie que votre code ne verra jamais ces demandes: ils seront servis tout de suite static/ sous-répertoire de votre application.

Une solution de contournement possible consiste à configurer un lien symbolique à partir de static à appname/static.

Si vous ne souhaitez pas encaisser votre référentiel avec un tel lien symbolique, vous pouvez utiliser un postinstall script à la place:

#!/bin/sh
# This creates the symlink required by DotCloud to serve static content from nginx
ln -s ~/current/appname/static ~/current/static

Le lien symbolique est élégant, mais le postinstall Les scripts vous donnent la possibilité de laisser tomber un commentaire dans le fichier, pour expliquer son objectif :-)

Les versions futures de DotCloud pourraient offrir une baisse de "configuration nue", où la configuration Nginx n'inclura aucune gestion de chemin spéciale, juste au cas où vous ne le voudriez pas.

En attendant, si vous souhaitez voir la configuration par défaut de Nginx de votre service dotCloud, vous pouvez simplement dotcloud ssh à votre service et inspecter /etc/nginx/sites-enabled/default.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top