小编And*_*tis的帖子

使用nginx + gunicorn + django的间歇性502s

在过去的几周里,我们遇到了越来越多的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 ssl http nginx gunicorn

6
推荐指数
1
解决办法
1812
查看次数

扩展django身份验证/授权的最佳方式

我正在向我们的网站添加服务条款接受要求,并试图找出在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每个视图中添加装饰器,同样我也想避免在我的每个视图中测试此权限.必须有一个更清洁的方式.

authentication django

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

功能样式中的分块对象(下划线/ Lodash)

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)

javascript functional-programming lodash

2
推荐指数
1
解决办法
1398
查看次数