在第一次 HTTP GET 期间(在重新加载守护进程模式下的 WSGI 之后),admin.site.unregister 抛出一个 NotRegistered 异常,但 admin.site.register 抛出一个 AlreadyRegistered 异常(catch-22?)但是,在随后的 HTTP GET 中,一切都加载得很好,没有错误。
设置:
设置.py:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
#'django.contrib.sites', #(this didn't seem to make a difference)
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
'django.contrib.admindocs',
'base',
'sample',
'reports',
'south',
)
Run Code Online (Sandbox Code Playgroud)
模型.py:
from django.db import models
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import …Run Code Online (Sandbox Code Playgroud) 我在 apache2 上有一个 WSGI 应用程序,它以最简单的方式写入日志文件:
def log (msg):
with open (LOGFILE, 'a') as f: f.write (msg)
Run Code Online (Sandbox Code Playgroud)
在我的沙箱环境中它运行良好,但我有点担心并发性。如果apache2运行各种线程,我是否需要担心并发问题?我的日志文件可能会被扰乱吗?log (msg)如果另一个线程已经在记录日志,调用可能会失败吗?如果是这种情况,我该如何预防呢?
编辑: 为了测试,我从两个 shell 同时运行两个脚本:
#! /usr/bin/python3.2
def log ():
with open ('log', 'a') as f:
f.write ('message from thread A\n')
while (True): log ()
Run Code Online (Sandbox Code Playgroud)
和
#! /usr/bin/python3.2
def log ():
with open ('log', 'a') as f:
f.write ('message from thread B\n')
while (True): log ()
Run Code Online (Sandbox Code Playgroud)
日志文件看起来不错,没有发生错误。我很幸运,或者从两个不同的线程写入同一个文件是否安全。文件系统是ext4。
我有一个列表,其中包含作为元组列表的帖子信息(列表由元组组成),但我面临着如何将其传递给瓶子中的模板的问题,我已经尝试了很多,并检查了 stackoverflow 中的大多数问题,我找不到一个好的且明确的问题。
这是我尝试过的:
@route('/v/:name')
def page_viwer(name):
id=db.searchU('user', name)
result=db.searchU_forG(id[0][0])
if len(result)>0:#if we got posts
return template('v',post=result)
Run Code Online (Sandbox Code Playgroud)
这是v.tpl
<html>
%for post in res:
%for id, title, dec, pic,not_needed in post:
<h3>{{id}}</h3>
<h3>{{title}}</h3>
<h3>{{dec}}</h3>
<h3>{{pic}}</h3>
<br/>
%end
</html>
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,我收到错误 500 ...当我检查日志时,原因是:
%for id, title, dec, pic in post:
TypeError: 'int' object is not iterable
我正在尝试将 Django 1.6.10-0 连接到以前在 1.5 上运行的项目。
在我的项目中编辑 wsgi.py 文件以包含项目路径后,我收到此错误:
mod_wsgi (pid=6805): Exception occurred processing WSGI script '/Users/Dreadfort/Documents/MyProject/project/wsgi.py'.
Traceback (most recent call last):
File "/Applications/djangostack-1.6.10-0/apps/django/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 187, in __call__
self.load_middleware()
File "/Applications/djangostack-1.6.10-0/apps/django/lib/python2.7/site-packages/django/core/handlers/base.py", line 44, in load_middleware
for middleware_path in settings.MIDDLEWARE_CLASSES:
File "/Applications/djangostack-1.6.10-0/apps/django/lib/python2.7/site-packages/django/conf/__init__.py", line 54, in __getattr__
self._setup(name)
File "/Applications/djangostack-1.6.10-0/apps/django/lib/python2.7/site-packages/django/conf/__init__.py", line 49, in _setup
self._wrapped = Settings(settings_module)
File "/Applications/djangostack-1.6.10-0/apps/django/lib/python2.7/site-packages/django/conf/__init__.py", line 128, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/Applications/djangostack-1.6.10-0/apps/django/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
__import__(name)
File "/Users/Dreadfort/Documents/MyProject/project/__init__.py", line 5, in <module>
from .celery import …Run Code Online (Sandbox Code Playgroud) 我们在nginx后面使用gunicorn的时候,总是需要proxy_pass请求给gunicorn。但是 Nginx 有一个 wsgi 模块,它允许它向 wsgi 应用服务器发送 wsgi 请求(uwsgi_pass),而且看起来 gunicorn 不能直接接受 wsgi 请求,它只是接受 HTTP 请求并将其转换为 wsgi 并调用 wsgi 应用程序。
gunicorn 是否支持直接接受 wsgi 请求?
如果不是,如果 Nginx 有一些需要发送到 wsgi 应用程序服务器的 wsgi env 参数,我该怎么办?
正如之前在多个问题/答案中强调的那样,即这个和这个我已经将我的配置WSGISocketPrefix为/etc/httpd/run/wsgi
/etc/httpd/run 目录具有 root:apache 权限,创建的 sock 文件具有 apache:root 权限。
我面临的问题是 apache总是试图连接到比它应该寻找的少一个的袜子。示例袜子是/var/run/httpd/wsgi.1769.1.1.sock但 apache 寻找/var/run/httpd/wsgi.1769.0.1.sock
AFAIK 没有权限问题,问题在于 apache 正在查找的 WSGI 袜子号。我怎样才能克服这个问题?为什么sock-versionwsgi 和 apache 之间存在不匹配?
确切的日志行: (2)No such file or directory: [client A.B.C.D:57798] mod_wsgi (pid=1549): Unable to conn
ect to WSGI daemon process 'wsgi' on '/etc/httpd/run/wsgi.1144.0.1.sock' after multiple attempts.
在flask doco 中,显示了在twisd 下部署flask 应用程序的以下描述。
twistd web --wsgi myproject.app
Run Code Online (Sandbox Code Playgroud)
我有一个看起来像这样的 foo.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
Run Code Online (Sandbox Code Playgroud)
所以我希望能够像这样在扭曲下运行
twistd web --wsgi foo.app
Run Code Online (Sandbox Code Playgroud)
但twisdd 不喜欢那样(只是吐出帮助文本)。
我究竟做错了什么 ?
顺便说一句,万一我在 virtualenv 中运行它(我已经安装了flask和twisted)和当前目录,当我发出twisd命令包含 foo.py 。
编辑:我使用的扭曲版本是 18.7.0
我没有注意到(直到 Peter Gibson 的评论提示)在帮助文本出现后会出现消息“No such WSGI application:'foo.app'”。
我一直在使用 Flasktest_client对象来测试我的 Web 应用程序。我使用BeautifulSoup来解析其中一些调用的 HTML 输出。
现在我想尝试使用requests-html,但我不知道如何让它与 Flask 测试客户端一起工作。示例都使用请求包来获取响应,但 Werkzeug 测试客户端并没有进行实际的 HTTP 调用。据我所知,它设置了环境并只调用处理程序方法。
有没有办法使这项工作无需运行实际服务?
我正在开发一个即将完成的小型Pyramid应用程序,因此现在我开始考虑如何部署它。
大多数Pyramid部署教程建议使用nginx作为pserve的反向代理。由于Pyramid应用程序只是wsgi应用程序,因此我也可以将其部署为nginx + wsgi,而无需使用反向代理。我想后者会有些困难,因为我对所有这些东西都是全新的,但是从直观上讲它应该能更快地工作。
所以问题是:nginx + pserve和nginx + wsgi部署方案之间是否有相当大的性能差异?
你需要用wsgi部署django吗?我在Docker实例上运行Django,看起来通常建议的解决方案只是使用Django的开发服务器,即命令python manage.py runserver.什么时候需要wsgi这样的Web服务器 - 在这种情况下,在容器化的应用程序中,django开发服务器是否足以用于生产应用程序?