2016-01-23 97 views
4

我試圖設置一個工作環境來運行後臺任務。我在兩個環境中運行相同的應用程序版本,一個是Web服務器,另一個是Worker。Elastic Beanstalk中的Django POST監聽器接收AWS Worker層請求

我需要根據到期日期定期刪除文件。我將一個視圖映射爲本地主機上的網址,其中郵件將作爲HTTP POST請求轉發。該任務正在安排中,似乎SQS正在運行,但消息全部位於WorkerDeadLetterQueue

在我所取得的請求的日誌文件,但403錯誤:

在/ var /日誌/的httpd /訪問日誌:

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

,這在的/ var /日誌/ 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,它顯示了一個在我的Web應用程序服務器的LOG_FILE GET請求

我該怎麼做才能讓工作環境執行任務?
爲什麼當工人試圖發送消息時,它會返回403錯誤?
它與角色權限有關嗎?
我應該在Django中編寫一個特定的監聽器嗎?
是用芹菜解決這個問題的最好方法嗎?

回答

0

創建POST請求的內部SQS守護進程不包含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")