[PYTHON] Bis es mit virtualenv + flask + apache + wsgi funktioniert

Bis es mit virtualenv + flask + apache + wsgi funktioniert

Führen Sie den Flow aus, um die flask-Anwendung mit apache auszuführen.

Mit Werkzeug ist es ziemlich einfach zu starten, aber Sobald es zu "Apache" + "Mod_wsgi" wird, steigt die Hürde, also habe ich es grob zusammengefasst.

Alle sind für Mac, lesen Sie daher bitte den entsprechenden Pfad usw.

Grundeinstellung

Geben Sie virtualenv ein, das sich auf diesen Bereich bezieht. http://qiita.com/k2tanaka/items/5f111612ec1b6d7584a6

mkvirtualenv -p ~/.pythonz/pythons/CPython-2.7.6/bin/python2.7  v2.7.6

workon und pip bis flask.

workon v2.7.6
pip install flask

Anwendungsteil

Der Inhalt ist sehr gut geeignet. Vorerst mit einem minimalen Beispiel.

Verfassung

Ordnen Sie den Dateipfad danach der Konfektion von "Apache" zu.

/Users/kuryu/workspace/test/flask
├── app.wsgi
├── app_templates
│   └── index.html
└── main.py

Inhalt

app.wsgi


# -*- coding:utf-8 -*-

import sys, os

import logging
#Erforderlich, um Apache zu protokollieren
logging.basicConfig(stream = sys.stderr)

sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

from main import app as application

main.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os
from flask import Flask, render_template
from jinja2 import FileSystemLoader

app = Flask(__name__)
#Versuchen Sie, das Vorlagenverzeichnis von jinja2 zu ändern
#Es muss nicht getrennt sein.
#Wenn nicht angegeben, dieselbe Hierarchie wie diese Datei"templates"werden.
app.jinja_loader = FileSystemLoader(
        os.path.join(os.path.abspath(os.path.dirname(__file__)), 'app_templates')
    )

@app.route("/")
def index():
    from flask import render_template
    return render_template('index.html')

@app.route("/foo")
def foo():
    return "foo"

@app.route("/foo/bar")
def foo_bar():
    return "foobar"

if __name__ == "__main__":
    app.run()

app_templates/index.html


hogehoge

Apache-Einstellungen

So fügen Sie mod_wsgi ein

Wurde weggelassen. Vielleicht kommt Linux mit "apt" oder "yum" oder von Anfang an mit "apache".

auf Mac

brew tap homebrew/apache
brew install mod_wsgi

Tu es

brew info mod_wsgi

Wenn Sie dies tun, kennen Sie den Pass.

conf Einstellungen

Da vitualenv verwendet wird, geben Sie den Speicherort von python mit WSGIPythonHome an.

flask.conf


## mod_wsgi
LoadModule wsgi_module /usr/local/Cellar/mod_wsgi/3.5/libexec/mod_wsgi.so

WSGIPythonHome /Users/kuryu/.virtualenvs/v2.7.6
WSGIDaemonProcess test user=kuryu group=staff threads=5
WSGIScriptAlias /test /Users/kuryu/workspace/test/flask/app.wsgi
WSGISocketPrefix /var/run/wsgi

<Directory /Users/kuryu/workspace/test/flask>
    Options +ExecCGI
    SetHandler wsgi-script
    AddHandler wsgi-script .wsgi
    Order deny,allow
    Allow from all
</Directory>

apache Neustart.

sudo apachectl restart

Versuche zu schlagen

Da / test in WSGIScriptAlias angegeben ist, ist die URL wie folgt.

curl localhost/test/
curl localhost/test/foo
curl localhost/test/foo/bar

das ist alles.

90% der Ursachen für Ärger sind "Apache" ...

Recommended Posts

Bis es mit virtualenv + flask + apache + wsgi funktioniert
Flasche + Gunicorn + Nginx + Supervisor Bis es funktioniert
Führen Sie Apache2 + WSGI + Flask aus
Bis Python auf Apache läuft
Erstellen einer Umgebung für Flask / MySql / Apache / mod_wsgi / virtualenv mit Redhat7 (Python2.7) November 2020
Bis es mit AtCoder hellblau wird
Bis Python mit Pythonbrew installiert ist und Flask auf dem WSGI-Server ausgeführt wird
POST das Bild mit json und erhalte es mit der Flasche
Erstellen Sie schnell Apache + Pipenv + Flask + SQLAlchemy mit Sakura VPS