我正在关注教程here。
我的nginx文件:
server {
listen 80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri @application;
}
location @application {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}
终端事物 - 激活virtualenv之后:
uwsgi -s /tmp/uwsgi.sock --module runserver --callable app --enable-threads --uid www-data --gid www-data
cat runserver.py
from __init__ import app
import routes
if __name__ == '__main__':
app.debug = True
app.secret_key = "BuckyCaptainAmericaHydraStarkTonyWidowBlack"
app.run(host='0.0.0.0', port=8080)
cat routes.py
from flask import Flask, render_template,request, session, redirect, url_for, flash, make_response
import datetime
import json
from bson.json_util import dumps
from controller import actionController
from controller import dataController
from controller import usersController
from controller import authController
import base64
from flask.ext.paginate import Pagination
from __init__ import app
@app.route('/')
def index():
return "<h1>Hello World</h1>"
这很完美!
但是,而不是Hello World ..如果做常规的话。
@app.route('/')
def index():
if 'loggedin' in session:
authController.Auth.forward()
它会引发内部服务器错误。
当我删除配置并执行:
python3 runserver.py
它没有任何问题,并且通过shell启动时效果惊人!
因此,如果我调用包含的文件(通过导入),并使用uwsgi,他们就会停止工作。
答案 0 :(得分:1)
Flask使用密钥对会话cookie进行签名。你给它分配一个这样的值:
if __name__ == '__main__':
# snip
app.secret_key = "BuckyCaptainAmericaHydraStarkTonyWidowBlack"
# snip
此块仅在您直接执行runserver.py
时运行。这就是
$ python3 runserver.py
的工作原理。但是,当您通过uWSGI运行应用程序时,检查的计算结果为false,并且永远不会设置密钥。
要解决此问题,请将app.secret_key = ...
移到if块之外。更好的是,将其移至__init__.py
,在那里实例化app
。这样你的应用程序将始终拥有其密钥。