Basispfad in Paster-Konfiguration
Frage
Ich versuche, Pyramidencode für dotcloud bereitzustellen.Leider werden einige Pfade nicht auf die gleiche Weise wie bei der lokalen Paster-Bereitstellung zugeordnet.Wenn ich die Entwicklungskonfiguration mit lokalem Server durchführe paster serve ...
, kann ich auf statische Dateien zugreifen, die in konfiguriert sind:
config.add_static_view('static', 'appname:static')
allerdings auf den Dotcloud-Servern, wenn die Skripte über Folgendes ausgeführt werden 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)
statischer Inhalt wird in einem falschen Verzeichnis gesucht.Statt /home/dotcloud/current/static/pylons.css
, es sollte hineinschauen /home/dotcloud/current/appname/static/pylons.css
Gibt es einen Teil der WSGI-Konfiguration, der das Basisverzeichnis definieren kann?Was verpasse ich?Die Anwendung wird über ausgeführt nginx
/ uwsgi
.
Ich habe versucht zu laden config:../production.ini
, relative_to=current_dir + '/appname'
aber das hat nichts geändert.
Lösung
Auf dotCloud beginnen URLs mit /static
werden direkt von nginx gehandhabt, nicht von uwsgi.Das bedeutet, dass Ihr Code diese Anfragen niemals sehen wird:sie werden sofort von der serviert static/
unterverzeichnis Ihrer Anwendung.
Eine mögliche Problemumgehung besteht darin, einen Symlink von einzurichten static
zu appname/static
.
Wenn Sie Ihr Repository nicht mit einem solchen Symlink überladen möchten, können Sie ein postinstall
skript stattdessen:
#!/bin/sh
# This creates the symlink required by DotCloud to serve static content from nginx
ln -s ~/current/appname/static ~/current/static
Der Symlink ist glatt, aber der postinstall
skripte geben Ihnen die Möglichkeit, einen Kommentar in die Datei einzufügen, um ihren Zweck zu erläutern :-)
Zukünftige Versionen von dotCloud bieten möglicherweise einen Umschalter für die "nackte Konfiguration", bei dem die Nginx-Konfiguration keine spezielle Pfadbehandlung enthält, nur für den Fall, dass Sie sie nicht möchten.
In der Zwischenzeit können Sie einfach die Nginx-Standardkonfiguration Ihres dotCloud-Dienstes anzeigen dotcloud ssh
zu Ihren Diensten und inspizieren /etc/nginx/sites-enabled/default
.