我在django 1.4上有一条错误消息:
字典更新序列元素#0的长度为1; 2是必需的
[编辑]
它发生在我尝试使用模板标签时:`{%for v in values%}:
dictionary update sequence element #0 has length 1; 2 is required
Request Method: GET
Request URL: ...
Django Version: 1.4.5
Exception Type: ValueError
Exception Value:
dictionary update sequence element #0 has length 1; 2 is required
Exception Location: /usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __init__, line 21
Python Executable: /usr/bin/uwsgi-core
Python Version: 2.7.3
Python Path:
['/var/www/',
'.',
'',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PIL',
'/usr/lib/pymodules/python2.7']
Server time: sam, 13 Jul 2013 16:15:45 +0200 …
Run Code Online (Sandbox Code Playgroud) 我在皇帝模式下运行uwsgi
uwsgi --emperor /path/to/vassals/ --buffer-size=32768
Run Code Online (Sandbox Code Playgroud)
并得到这个错误
invalid request block size: 21327 (max 4096)...skip
Run Code Online (Sandbox Code Playgroud)
该怎么办??我也试过-b 32768
我收到了很多499 nginx错误代码.我看到这是客户端问题.这不是Nginx或我的uWSGI堆栈的问题.我注意到当获得499时uWSGI日志中的相关性.
address space usage: 383692800 bytes/365MB} {rss usage: 167038976
bytes/159MB} [pid: 16614|app: 0|req: 74184/222373] 74.125.191.16 ()
{36 vars in 481 bytes} [Fri Oct 19 10:07:07 2012] POST /bidder/ =>
generated 0 bytes in 8 msecs (HTTP/1.1 200) 1 headers in 59 bytes (1
switches on core 1760)
SIGPIPE: writing to a closed pipe/socket/fd (probably the client
disconnected) on request /bidder/ (ip 74.125.xxx.xxx) !!!
Fri Oct 19 10:07:07 2012 - write(): Broken pipe [proto/uwsgi.c line
143] during POST /bidder/ (74.125.xxx.xxx) …
Run Code Online (Sandbox Code Playgroud) Ubuntu 12.04,nginx 1.2.0,uwsgi 1.0.3.
我使用以下命令启动uwsgi:
uwsgi -s 127.0.0.1:9010 -M -t 30 -A 4 -p 4 -d /var/log/uwsgi.log
Run Code Online (Sandbox Code Playgroud)
在每个请求中,nginx回复502并且uwsgi写入以记录以下行:
-- unavailable modifier requested: 0 --
Run Code Online (Sandbox Code Playgroud) 当运行uwsgi时,我收到以下消息:
!!! no internal routing support, rebuild with pcre support !!!
Run Code Online (Sandbox Code Playgroud)
我已经使用以下命令安装了pcre(我认为):
Sudo apt-get install libpcre3 libpcre3-dev
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么即使在我安装了pcre软件包之后我仍然收到此消息,如果我需要重新安装uwsgi并激活pcre我该怎么做?
此外,内部路由是否重要?我认为它确实如此,否则uwsgi的制造商就不会提出这个消息.我运行Ubuntu 12.04 LTS
.
谢谢您的帮助!
当我尝试使用uWSGI启动Flask时出现以下错误.我是这样开始的:
> # cd ..
> root@localhost:# uwsgi --socket 127.0.0.1:6000 --file /path/to/folder/run.py --callable app - -processes 2
Run Code Online (Sandbox Code Playgroud)
这是我的目录结构:
-/path/to/folder/run.py
-|app
-|__init__.py
-|views.py
-|templates
-|static
Run Code Online (Sandbox Code Playgroud)
的内容 /path/to/folder/run.py
if __name__ == '__main__':
from app import app
#app.run(debug = True)
app.run()
Run Code Online (Sandbox Code Playgroud)
的内容 /path/to/folder/app/__init__.py
import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
#from flaskext.babel import Babel
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
#app.config.from_pyfile('babel.cfg')
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.setup_app(app)
login_manager.login_view = 'login'
login_manager.login_message = u"Please …
Run Code Online (Sandbox Code Playgroud) 我正在使用nginx和uwsgi运行django应用程序.这是我如何运行uwsgi:
sudo uwsgi -b 25000 --chdir=/www/python/apps/pyapp --module=wsgi:application --env DJANGO_SETTINGS_MODULE=settings --socket=/tmp/pyapp.socket --cheaper=8 --processes=16 --harakiri=10 --max-requests=5000 --vacuum --master --pidfile=/tmp/pyapp-master.pid --uid=220 --gid=499
Run Code Online (Sandbox Code Playgroud)
&nginx配置:
server {
listen 80;
server_name test.com
root /www/python/apps/pyapp/;
access_log /var/log/nginx/test.com.access.log;
error_log /var/log/nginx/test.com.error.log;
# https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production
location /static/ {
alias /www/python/apps/pyapp/static/;
expires 30d;
}
location /media/ {
alias /www/python/apps/pyapp/media/;
expires 30d;
}
location / {
uwsgi_pass unix:///tmp/pyapp.socket;
include uwsgi_params;
proxy_read_timeout 120;
}
# what to serve if upstream is not available or crashes
#error_page 500 502 503 504 /media/50x.html;
}
Run Code Online (Sandbox Code Playgroud)
这就是问题所在.在服务器上执行"ab"(ApacheBenchmark)时,我得到以下结果:
nginx版本:nginx版本:nginx/1.2.6 …
只是想帮助别人.是的,你只想使用nginx提供静态文件,你在nginx.conf中得到了一切:
location /static {
autoindex on;
#root /root/downloads/boxes/;
alias /root/downloads/boxes/;
}
Run Code Online (Sandbox Code Playgroud)
但是,最后,你失败了.你从浏览器得到"403禁止"......
---------------------------------------- 下面的答案: ------ ----------------------------------
解决方案非常简单:
方法1:以用户身份运行nginx作为'/ root/downloads/boxes /'所有者
在nginx.conf中:
?user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
Run Code Online (Sandbox Code Playgroud)
是的,在第一行" #user noboy; "中,只需删除" # ",并在Linux/OS X中将" nobody " 更改为您自己的用户名,即更改为" root "进行测试.重启nginx.
注意,你最好不要以root身份运行nginx!这里只是为了测试,对黑客来说是危险的.
有关更多参考,请参阅nginx(引擎X) - BUM中的痛苦![13:许可被拒绝]
方式2:将'/ root/downloads/boxes /'所有者更改为'www-data'或'nobody'
在终端:
ps aux | grep nginx
Run Code Online (Sandbox Code Playgroud)
获取运行nginx的用户名.应该是'www-data'或'nobody'由nginx的版本决定.然后点击终端(例如使用'www-data'):
chown -R www-data:www-data /root/downloads/boxes/
Run Code Online (Sandbox Code Playgroud)
------------------------------ 一件更重要的事情是: …
uwsgi ×10
nginx ×5
python ×5
django ×3
flask ×2
wsgi ×2
http-headers ×1
pcre ×1
ubuntu-12.04 ×1