在过去的几周里,我们遇到了越来越多的502错误.目前我们的堆栈是在由小型RDS实例支持的m1.large EC2实例上的nginx + gunicron + django.
随着请求负载的增加,它们似乎变得更加频繁.我将在使用浏览器时看到随机502,但是我们的命令行脚本命中api(Tasty Pie)通常会在第二次或第三次请求时失败.但是,如果我在发出请求之前向脚本添加一个sleep函数,那么该请求就可以了,但是下一个请求就可以了502.请注意,我们使用digest auth与请求库和睡眠包装器 - 因此401,200模式.
为了使调试更加棘手,当Gunicorn使用--debug选项运行时,问题会自行解决.如果我删除--debug选项但明确地将我的Gunicorn工作者限制为1,则该错误仍然存在.
我的nginx.conf:
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_proxied any;
gzip_types application/x-ghi-packedschemafeatures-v1
gzip_http_version …Run Code Online (Sandbox Code Playgroud) 我正在向我们的网站添加服务条款接受要求,并试图找出在Django的身份验证框架中处理此问题的最佳方法.
为简单起见,这是一个UserProfile模型:
class UserProfile(models.Model):
user = models.OneToOneField(User)
accepted_tos_at = models.DateTimeField(default=None, editable=False, null=True)
Run Code Online (Sandbox Code Playgroud)
所以基本上我想做的是检查accepted_tos_at是不是None(或实际上大于上次TOS修订的日期).如果它通过了这个测试,那么我们会正常进行身份验证,但是如果它是None除了login并且tos_display不可访问的所有视图.
我所依赖的是你应该如何在全球范围内做这件事?我宁愿不在我的user_passes_test每个视图中添加装饰器,同样我也想避免在我的每个视图中测试此权限.必须有一个更清洁的方式.
Lodash有一个很好的数组块方法; 是否存在对象(关联数组)的等价物?必要的解决方案非常简单,但我只是好奇是否有更清晰的功能实现?
势在必行的解决方案:
将对象作为输入
返回具有size多个属性的对象数组
var chunk = function(input, size){
var obj = {};
var output = [];
var counter = 0;
for (var k in input) {
if(!input.hasOwnProperty(k)){
continue;
}
obj[k] = input[k];
if (++counter % size === 0) {
output.push(obj);
obj = {};
}
}
if (Object.keys(obj).length !== 0){
output.push(obj);
}
return output;
};
Run Code Online (Sandbox Code Playgroud)