【发布时间】:2016-05-14 15:31:15
【问题描述】:
我正在开发一个软件功能,我必须使用 Django + cron + AWS 定期删除文件。问题是我不能让它工作。让它发挥作用的最佳方法是什么?我是否缺少一些 AWS 配置?我已经配置了一个 web server 和一个 worker 环境,在它们上面部署了相同的应用程序版本。任务是映射到 url 的 view(访问执行函数的 url)。工作环境上有一条确认消息:
从 cron.yaml 成功加载 1 个计划任务。
但工作人员 access_log 上也出现 403 错误:
“POST /networks_app/delete_expired_files HTTP/1.1”403 2629“-”“aws-sqsd/2.0”
cron.yaml:
version: 1
cron:
- name: "delete_expired_files"
url: "/networks_app/delete_expired_files"
schedule: "10 * * * *"
urls.py 中的 url 映射:
urlpatterns = [
url(r'^delete_expired_files', views.delete_expired_files, name='delete_expired_files'),
]
删除views.py文件的功能:
def delete_expired_files(request):
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()
我的 IAM 角色是:
AmazonSQSFullAccess
AmazonS3FullAccess
AWSElasticBeanstalkFullAccess
AmazonDynamoDBFullAccess
如果我通过浏览器访问 url,则执行任务(删除过期文件)。但是,工作环境应该访问 url 并自动执行任务,而不仅仅是当我通过浏览器访问 url 时。我怎样才能让它发挥作用?
【问题讨论】:
标签: python django amazon-web-services cron amazon-elastic-beanstalk