2017-09-26 3 views
4

Ich versuche das Verhalten von Pyramid in Bezug auf die [main:server] Konfiguration und Gunicorn zu verstehen.Pyramid Gunicorn und Kellnerin

Wenn ich pserve verwende, wird die Konfiguration von [main:server] für Kellnerin und Gunicorn verwendet. Zum Beispiel:

# development.ini 
[server:main] 
use = egg:waitress#main 
listen = *:6543 

So, jetzt $ pserve development.ini wird das Projekt mit Kellnerin starten, die erwartet wird. Aber wenn ich den Befehl $ gunicorn (mit Gunicorn oder Kellnerin in der INI-Datei) verwende, wird es auch funktionieren, was von mir nicht erwartet wird.

Meine Fragen sind:

  • warum diese Konfiguration funktionieren, wenn ich den Befehl $ gunicorn --paste development.ini laufen?

  • Was passiert unter dem Haken? arbeitet Kellnerin? (Ich würde sagen, es ist nicht nach den Prozessen in meinem Computer)

Antwort

0

Also, nach vielen Lesen und Test, ich habe das zu dem Schluss:

  • [main:server] verwendet, ist obligatorisch für eine Pyramide Anwendung
  • wenn Sie die Anwendung mit gunicorn ausgeführt werden, müssen Sie diese definieren [main:server] dennoch
  • gunicorn das use Attribut ignorieren, aber Pyramide wird das Ei überprüfen existiert
  • gunicorn den Rest der Einstellungen (falls vorhanden) verwenden, aber sie werden weniger Priorität haben als die Befehlszeilenargumente oder die config.py Datei

Der Grund für dieses Verhalten mir immer noch verwirrend ist, aber bei Wenigstens kann ich damit arbeiten. Alle anderen Hinweise werden sehr geschätzt.

2

Es gibt zwei unabhängige Konfigurationsschritte, die zum Starten von Anfragen für jede WSGI-App erforderlich sind.

1) Welche WSGI App zu verwenden.

2) Welcher WSGI-Server wird verwendet.

Diese Teile werden separat gehandhabt und können je nach Einstellung unterschiedlich ausgeführt werden. Das Ini-Dateiformat wird von der PasteDeploy-Bibliothek definiert und bietet einem Verbraucher des Formats die Möglichkeit, sowohl die App-Konfiguration als auch die Serverkonfiguration zu bestimmen. Wenn Sie jedoch gunicorn --paste foo.ini verwenden, geben Sie bereits Gunicorn an, dass Sie den Gunicorn-Server (nicht die Kellnerin) verwenden möchten, so dass der Serverbereich ignoriert wird und nur die App geladen wird. Gunicorn hat auch andere Möglichkeiten, die App zu laden, aber ich werde diese Komplexität jetzt ignorieren, da dieser Teil für dich arbeitet. Jede Serverkonfiguration für Gunicorn muss separat durchgeführt werden ... Es wird nicht der Abschnitt [server:main] gelesen, wenn Sie gunicorn vom CLI ausführen. Alternativ können Sie Ihre App mit,starten, die tut Verwenden Sie den Server-Abschnitt, um festzustellen, welcher Server zu verwenden - aber in Ihrem aktuellen Setup, die Kellner anstelle von Gunicorn laufen würde.

+0

Vielen Dank für Ihre Antwort. Es ist mehr oder weniger das, was ich abgeschlossen habe, bis auf eines: selbst wenn ich "gunicorn - paste file" benutze.ini "Ich muss ein gültiges' [main: server]> use' konfigurieren, sonst wird sich die Pyramide beschweren (obwohl ich sehe, dass Gunicorn diese Informationen nicht zum Ausführen benutzt). Das scheint aus meiner Sicht etwas inkohärent zu sein. – yami

+0

Ja, wenn man sich den Gunicorn-Code ansieht, wird er versuchen, config aus diesem Abschnitt zu lesen, ich würde das als einen Bug betrachten, der ohne diesen Abschnitt abstürzt. –