当我运行 django 开发服务器 ( ./manage.py runserver) 时,所有请求的 url 都会方便地记录到进程标准输出中,并带有精确的时间和响应代码:
[09/Jun/2016 23:35:53] "GET /api/game/ HTTP/1.1" 404 3185
[09/Jun/2016 23:36:01] "GET /api/game/123/ HTTP/1.1" 404 1735
Run Code Online (Sandbox Code Playgroud)
它非常方便,因为在分析输出时,您会立即看到与日志消息相对应的请求,例如:
WARNING:2016-06-09 23:41:27,806:views:7449:140139847718656: No such object in the database: u'123'
[09/Jun/2016 23:41:27] "GET /api/game/123/ HTTP/1.1" 404 1735
Run Code Online (Sandbox Code Playgroud)
我曾经使用 uwsgi+nginx,所以我对所有内容都使用“控制台”日志处理程序,然后像这样启动 uwsgi:
exec uwsgi --master --die-on-term --logto /var/log/uwsgi.log
Run Code Online (Sandbox Code Playgroud)
结果我得到了所有必要的登录/var/log/uwsgi.log、uwsgi 的请求记录和我自己的日志消息。
现在我想用 Apache+mod WSGI+django 达到同样的结果。我希望唯一的文件在一个地方包含我的 django 应用程序的所有请求和所有日志。
我尝试使用 Django 日志配置来实现此目的,但即使我将 django.requests 重定向到同一个文件,我也只能在日志中收到我自己的消息,根本没有请求。这是配置的部分:
'handlers': {
'file_handler': {
'level': DEBUG and 'DEBUG' or 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': join(LOG_DIRECTORY, 'api_log.log'), …Run Code Online (Sandbox Code Playgroud) 我有几个使用 WSGI 在我的 apache 服务器上运行的 python 3.6 Flask 应用程序。
有 2 个不同的应用程序在同一个 apache 服务器上运行:
www.example.com/lodge
www.example.com/dashboard
这两款应用程序都有其独特之处app.secret_key
该/dashboard应用程序是一个 Flask 应用程序,有自己的一组路由:
/dashboard/login
/dashboard/orders
/dashboard/staff
登录路由调用session.clear()并让用户输入登录信息。然后,登录的令牌将存储在会话变量中。
和路由都有一个装饰器,用于检查会话中登录令牌是否存在,如果不存在则重定向到登录路由/dashboard/orders。dashboard/staff
该/lodge 应用程序是另一个简单的 Flask 应用程序,有自己的路由:
/lodge/welcome
/lodge/personal
/lodge/review
/lodge/confirmation
欢迎路由也会调用session.clear(),然后显示一个 Web 表单。当用户提交 Web 表单时,personal将调用将这些 Web 表单输入值存储到会话中的路由。
我遇到的问题是,如果我导航到www.example.com/dashboard/login并登录,然后我可以在工作人员和订单路线之间滑动,一点问题都没有,但是当我打开一个新选项卡并转到www.example.com/lodge/welcome(然后调用session.clear)然后重新打开仪表板时选项卡并尝试转到员工或订单路线,由于会话已被清除,我被重定向回登录路线。
httpd.conf:
<VirtualHost *:80>
WSGIScriptAlias /newapp "c:/lodge/lodge.wsgi"
<Directory "c:/lodge">
Require all granted
</Directory>
WSGIScriptAlias /dashboard "c:/dashboard/dashboard.wsgi"
<Directory "c:/dashboard">
Require all …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我创建了一个app:

代码website_chat/views.py:
async_mode = 'eventlet'
import os
from django.http import HttpResponse
import socketio
basedir = os.path.dirname(os.path.realpath(__file__))
sio = socketio.Server(async_mode=async_mode)
thread = None
Run Code Online (Sandbox Code Playgroud)
这website_chat/management/commands/runserver.py:
from django.core.management.commands.runserver import Command as RunCommand
from xxx/website_chat.views import sio
class Command(RunCommand):
help = 'Run the Socket.IO server'
def handle(self, *args, **options):
if sio.async_mode == 'threading':
super(Command, self).handle(*args, **options)
elif sio.async_mode == 'eventlet':
# deploy with eventlet
import eventlet
import eventlet.wsgi
from Qyun.wsgi import application
eventlet.wsgi.server(eventlet.listen(('', 8002)), application)
elif sio.async_mode == …Run Code Online (Sandbox Code Playgroud) 我在 Apache 下配置了一个 WSGI 处理程序,并且在 Apache 虚拟主机配置中定义了一些环境变量。
SetEnv APP_CONFIG "/var/lib/myapp/app.config"
SetEnv LOG_CONFIG "/var/lib/myapp/app.logging.yml"
Run Code Online (Sandbox Code Playgroud)
为了在开发中测试处理程序而无需安装和配置 Apache,我使用了uWSGI该--http选项。
uwsgi --http :9090 --ini uwsgi.ini --wsgi-file wsgi.py
Run Code Online (Sandbox Code Playgroud)
wsgi.py
def application(environ, start_response):
config_file_path = environ['APP_CONFIG']
start_response('200 OK', [('Content-Type','text/html')])
return ["Hello World"]
Run Code Online (Sandbox Code Playgroud)
使用 uWSGI http 服务器,如何将这些变量作为environ参数的一部分传递给我的应用程序?
我尝试在 uwsgi.ini 文件中设置环境变量:
[uwsgi]
env = APP_CONFIG="/var/lib/myapp/app.config"
Run Code Online (Sandbox Code Playgroud)
但我得到:
File "wsgi.py", line 5, in application
config_file_path = environ['APP_CONFIG']
KeyError: 'APP_CONFIG'
Run Code Online (Sandbox Code Playgroud) 我有一个在 Windows EC2 实例上运行的 Flask 服务器。
我需要使用https协议,所以我的设置如下:
这是我的 Caddy 配置:
example.com:443{
proxy / 127.0.0.1:8080
tls me@example.com
}
Run Code Online (Sandbox Code Playgroud)
一切工作正常,除了在我的application.py文件中,当我这样做时:
return redirect(url_for('test', filename=filename))
Run Code Online (Sandbox Code Playgroud)
我的网络浏览器重定向我:
结果与_external=True
但是在模板页面上,例如使用https://example.com/test2呈现render_template( "test2.html"),如果我有链接,<a href="{{ url_for('index') }}" />则生成的 HTML 很好: https: //example.com/
现在我已经在 application.py 中硬编码了我的网址,但这不是我想要保留它的方式......
谁能帮我理解 wsgi.py 文件的用途是什么?
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.local")
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud) 我有一个在 Ubuntu 18.04、Apache 服务器、react 前端、Flask (selenium) 后端上运行的 Flask 应用程序。
我的应用程序运行良好,但有时我在很多服务器上收到以下消息:
numpy: Interpreter change detected - this module can only be loaded into one interpreter per process.
Run Code Online (Sandbox Code Playgroud)
完整的错误日志:
mod_wsgi (pid=27625): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'.
[Tue Sep 15 05:01:05.669296 2020] [wsgi:error] [pid 27625:tid 140687123134208] [client 209.17.96.82:41300] Traceback (most recent call last):
[Tue Sep 15 05:01:05.669407 2020] [wsgi:error] [pid 27625:tid 140687123134208] [client 209.17.96.82:41300] File "/var/www/FlaskApp/flaskapp.wsgi", line 7, in <module>
[Tue Sep 15 05:01:05.669451 2020] [wsgi:error] [pid 27625:tid 140687123134208] [client 209.17.96.82:41300] from …Run Code Online (Sandbox Code Playgroud) 我有一个基于 Flask 的 Web 应用程序,可以通过 Zappa 部署到 AWS Lambda。一切都很好。
\nFlask 文档说:
\n\n\n虽然轻量且易于使用,但 Flask\xe2\x80\x99s 内置服务器不适合生产,因为它\xe2\x80\x99t 不能很好地扩展。此处记录了一些可用于在生产中正确运行 Flask 的选项。
\n
在独立服务器上,Python 是单线程的(全局解释器锁(GIL)等),因此如果没有应有的谨慎和注意,就无法很好地处理多个请求。
\n在 AWS Lambda(可能还有其他 FaaS 基础设施)上,每个 HTTP 请求都会获得一个单独的 Python 实例,因此 GIL 不是问题,并且 Lambda 通过使用多个函数调用来负责扩展。
\n因此,在 AWS Lambda 上运行时,是否强烈建议使用 WGSI 容器(Gunicorn、uWGSI 等)?为什么或者为什么不?
\n我猜测可能相关的一些因素包括:
\n我在其中一个视图中使用了subprocess.Popen:
path = os.path.join(os.path.dirname(__file__), 'foo/bar.py')
subprocess.Popen(["python",path])
Run Code Online (Sandbox Code Playgroud)
在我的wsgi文件中,我有
import os
import sys
ppath = '/home/socialsense/ss/src'
if ppath not in sys.path:
sys.path.append(ppath)
os.environ['DJANGO_SETTINGS_MODULE'] = 'ss.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
而在src我有ss,我的Django项目.
但是当我检查我的日志文件时,bar.py遇到了错误,ImportError: No module named ss.discovery.models.现在似乎模块ss本身在sys.path使用时不在Popen......
我在这里做错了什么?
尝试访问django管理面板时出现以下错误.
Environment:
Request Method: GET
Request URL: http://localhost:8000/admin/
Django Version: 1.9.8
Python Version: 2.7.10
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bookapp']
Installed Middleware:
['django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware']
Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py" in wrapper
265. return self.admin_view(view, cacheable)(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py" in inner …Run Code Online (Sandbox Code Playgroud) wsgi ×10
python ×9
django ×5
flask ×4
apache ×3
aws-lambda ×1
caddy ×1
django-2.0 ×1
django-3.0 ×1
eventlet ×1
logging ×1
mod-wsgi ×1
numpy ×1
session ×1
subprocess ×1
uwsgi ×1
waitress ×1
zappa ×1