Python 用于接收AWS工作层请求的Elastic Beanstalk中的Django POST侦听器
我正在尝试设置工作环境以运行后台任务。我在两个环境中运行相同的应用程序版本,一个是web服务器,另一个是Worker 我需要根据过期日期定期删除文件。我已将视图映射为本地主机上的URL,消息将作为HTTP POST请求转发。正在计划任务,似乎SQS正在运行,但所有消息都位于WorkerDeadLetterQueue 在日志文件中,我收到了请求,但出现了403错误: /var/log/httpd/access\u log: “发布/网络应用程序/删除过期文件HTTP/1.1“403 2629”-“aws sqsd/2.0” 这是在/var/log/aws sqsd/default.log: 信息:发送至%[ 2016-01-23T14:58:05Z http错误:d5f645cf-ce15-40bc-8ee3-34acb79e797b(4)403-0.007 这是我的视图.py代码:Python 用于接收AWS工作层请求的Elastic Beanstalk中的Django POST侦听器,python,django,amazon-web-services,amazon-ec2,worker,Python,Django,Amazon Web Services,Amazon Ec2,Worker,我正在尝试设置工作环境以运行后台任务。我在两个环境中运行相同的应用程序版本,一个是web服务器,另一个是Worker 我需要根据过期日期定期删除文件。我已将视图映射为本地主机上的URL,消息将作为HTTP POST请求转发。正在计划任务,似乎SQS正在运行,但所有消息都位于WorkerDeadLetterQueue 在日志文件中,我收到了请求,但出现了403错误: /var/log/httpd/access\u log: “发布/网络应用程序/删除过期文件HTTP/1.1“403 2629”-“
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应用程序服务器的日志文件中显示一个GET请求
我应该怎么做才能让工作环境执行任务?为什么当工作者尝试发送消息时,返回403错误?
是否与角色权限相关?
我应该用Django编写一个特定的侦听器吗?
使用芹菜是解决此问题的最佳方法吗?创建POST请求的内部SQS守护程序不包括CSRF令牌,这可能导致“403禁止”错误 一个潜在的解决方法是将该方法标记为csrf_豁免:
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def index(request):
return HttpResponse("hello, world")
如果您想要一个库来为您处理这个问题,您可以尝试使用这个包