[PYTHON] Jusqu'à ce que cela fonctionne avec virtualenv + flask + apache + wsgi

Jusqu'à ce que cela fonctionne avec virtualenv + flask + apache + wsgi

ʻApache` exécute le flux pour exécuter l'application flask.

Avec Werkzeug, il est assez facile de démarrer, mais ʻApache+mod_wsgi` soulève l'obstacle dès qu'il le devient, alors je l'ai résumé grossièrement.

Tous sont pour mac, veuillez donc lire le chemin, etc.

Réglage initial

Entrez virtualenv en vous référant à cette zone. http://qiita.com/k2tanaka/items/5f111612ec1b6d7584a6

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

workon et pip jusqu'à flask.

workon v2.7.6
pip install flask

Partie application

Le contenu est très approprié. Pour le moment, avec un minimum d'exemple.

Constitution

Faites correspondre le chemin du fichier avec la configuration de ʻapache` après cela.

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

Contenu

app.wsgi


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

import sys, os

import logging
#Requis pour enregistrer Apache
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__)
#Essayez de changer le répertoire des modèles de jinja2
#Cela n'a pas à être séparé.
#Si omis, la même hiérarchie que ce fichier"templates"devenir.
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

paramètres Apache

Comment insérer mod_wsgi

Est omis. Peut-être que si c'est Linux, vous pouvez le saisir avec ʻapt ou yum, ou il est inclus dans ʻapache depuis le début.

sur mac

brew tap homebrew/apache
brew install mod_wsgi

fais le

brew info mod_wsgi

Si vous le faites, vous connaîtrez le pass.

paramètres de conf

Puisque vitualenv est utilisé, spécifiez l'emplacement de python avec WSGIPythonHome.

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>

Redémarrer ʻApache`.

sudo apachectl restart

Essayez de frapper

Puisque / test est spécifié dans WSGIScriptAlias, l'url est comme ceci.

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

c'est tout.

90% des causes de désagrément sont «apache» ...

Recommended Posts

Jusqu'à ce que cela fonctionne avec virtualenv + flask + apache + wsgi
Flacon + Gunicorn + Nginx + Supervisor jusqu'à ce que cela fonctionne
Exécutez Apache2 + WSGI + Flask
Jusqu'à ce que Python fonctionne sur Apache
Création d'un environnement pour Flask / MySql / Apache / mod_wsgi / virtualenv avec Redhat7 (Python2.7) Novembre 2020
Jusqu'à ce qu'il devienne bleu clair avec AtCoder
Jusqu'à ce que Python soit installé avec pythonbrew et que Flask s'exécute sur le serveur WSGI
POSTER l'image avec json et la recevoir avec flask
Construisez rapidement Apache + Pipenv + Flask + SQLAlchemy avec Sakura VPS