2016-01-23 4 views
4

Я пытаюсь настроить рабочую среду для выполнения фоновой задачи. У меня такая же версия приложения, работающая в двух средах, одна из которых - веб-сервер, а другая - рабочий.Django POST прослушиватель в эластичном Beanstalk для получения запросов рабочего уровня AWS

Мне нужно удалить файлы периодически в соответствии с датой окончания срока действия. Я сопоставил представление как URL-адрес на локальном хосте, где сообщения будут перенаправляться как HTTP-запросы POST. Задание запланировано и похоже, что SQS работает, но все сообщения находятся на рабочем столе WorkerDeadLetterQueue.

В файле журнала я получил запросы делаются, но 403 ошибка:

/вар/Журнал/HTTPD/access_log:

"POST /networks_app/delete_expired_files HTTP/1.1" 403 2629 "-" "aws-sqsd/2.0"

и это в /вар/Журнал/AWS-sqsd/default.log:

message: sent to %[ http://localhost:80/networks_app/delete_expired_files] 2016-01-23T14:58:05Z http-err: d5f645cf-ce15-40bc-8ee3-34acb79e797b (4) 403 - 0.007

Вот мой views.py Код:

def delete_expired_files(request): 
    if request.method == 'POST': 
     users = DemoUser.objects.all() 
     for user in users: 
      documents = Document.objects.filter(owner=user.id) 
      if documents: 
       for doc in documents: 
        now = timezone.now() 
        if now >= doc.date_published + timedelta(days = doc.owner.group.valid_time): 
         doc.delete() 

cron.yaml файл:

version: 1 
cron: 
- name: "delete_expired_files" 
    url: "/networks_app/delete_expired_files" 
    schedule: "* * * * *" 

Если я получить доступ к URL через браузер он работает, он показывает GET запрос на LOG_FILE моего сервера веб-приложений ,

Что делать, чтобы рабочая среда выполняла задачу?
Почему, когда рабочий пытается отправить сообщение, он возвращает ошибку 403?
Связано ли это с правами на роль?
Должен ли я закодировать конкретный прослушиватель в Django?
Использует сельдерей - лучший способ решить эту проблему?

ответ

0

Внутренний демон SQS, который создает запрос POST, не включает токен CSRF, что может привести к ошибкам «403 Forbidden».

Потенциальный обходной путь для этого является пометить метод как csrf_exempt:

from django.http import HttpResponse 
from django.views.decorators.csrf import csrf_exempt 

@csrf_exempt 
def index(request): 
    return HttpResponse("hello, world")