标签: wsgi

将所有请求记录到文件 Django

当我运行 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)

python apache django logging wsgi

4
推荐指数
1
解决办法
1万
查看次数

当在其中一个应用程序上调用 session.clear 时,单个 apache 服务器上的多个 Python Flask 应用程序会丢失会话

我有几个使用 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/ordersdashboard/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)

python apache session wsgi flask

4
推荐指数
1
解决办法
2864
查看次数

raise RuntimeError('您需要使用 eventlet 服务器。'

在我的项目中,我创建了一个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)

python django wsgi eventlet

4
推荐指数
1
解决办法
7788
查看次数

如何将环境变量传递给 uwsgi?

我在 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)

python wsgi uwsgi

4
推荐指数
1
解决办法
1万
查看次数

Flask 正在生产中,带有 Caddy 和 Waitress url_for 重定向到本地主机

我有一个在 Windows EC2 实例上运行的 Flask 服务器。

我需要使用https协议,所以我的设置如下:

  • 我有一个 Caddy 服务器
  • 我使用 Waitress 来运行我的 Flask 应用程序

这是我的 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 中硬编码了我的网址,但这不是我想要保留它的方式......

python wsgi flask waitress caddy

4
推荐指数
1
解决办法
3942
查看次数

使用 django-admin startproject 创建时,django 应用程序中的 wsgi.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)

python django wsgi django-2.0 django-3.0

4
推荐指数
1
解决办法
1万
查看次数

Python:numpy:检测到解释器更改 - 该模块只能加载到每个进程的一个解释器中

我有一个在 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)

python apache wsgi numpy flask

4
推荐指数
1
解决办法
4914
查看次数

WSGI 容器与 AWS Lambda 相关吗?

我有一个基于 Flask 的 Web 应用程序,可以通过 Zappa 部署到 AWS Lambda。一切都很好。

\n

Flask 文档说:

\n
\n

虽然轻量且易于使用,但 Flask\xe2\x80\x99s 内置服务器不适合生产,因为它\xe2\x80\x99t 不能很好地扩展。此处记录了一些可用于在生产中正确运行 Flask 的选项。

\n
\n

在独立服务器上,Python 是单线程的(全局解释器锁(GIL)等),因此如果没有应有的谨慎和注意,就无法很好地处理多个请求。

\n

在 AWS Lambda(可能还有其他 FaaS 基础设施)上,每个 HTTP 请求都会获得一个单独的 Python 实例,因此 GIL 不是问题,并且 Lambda 通过使用多个函数调用来负责扩展。

\n

因此,在 AWS Lambda 上运行时,是否强烈建议使用 WGSI 容器(Gunicorn、uWGSI 等)?为什么或者为什么不?

\n

我猜测可能相关的一些因素包括:

\n
    \n
  • 成本
  • \n
  • 资源(例如数据库连接)
  • \n
  • 虫子
  • \n
  • 启动性能
  • \n
  • 每个请求的开销
  • \n
\n

wsgi flask zappa aws-lambda

4
推荐指数
1
解决办法
2428
查看次数

python + django:无法用Popen找到模块

我在其中一个视图中使用了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......

我在这里做错了什么?

python django subprocess mod-wsgi wsgi

3
推荐指数
1
解决办法
1362
查看次数

Django:'WSGIRequest'对象没有属性'user'? - AuthenticationMiddleware和SessionAuthenticationMiddleware按顺序排列

尝试访问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)

python django wsgi

3
推荐指数
1
解决办法
4280
查看次数