我在Heroku上运行Django + Celery。 我在后台(Heroku worker)的Celery任务中创建文件,并使用以下方法将图像上传到S3:
def uploadToS3(img, out):
out_im = cStringIO.StringIO()
img.save(out_im, 'gif')
conn = boto.connect_s3()
b = conn.get_bucket('mybucket')
k = b.new_key(out)
k.set_contents_from_string(out_im.getvalue(),{'Content-Type': 'image/gif'})
k.set_acl('public-read')
#test
imageExists = default_storage.exists(out)
if imageExists:
print out + " exists."
else:
print out + " does not exists."
完美无缺。确实创建了图像。
问题是在创建文件后,在S3 Web控制台和浏览器上也可以看到它(它在那里......) - 运行相同的测试:
imageExists = default_storage.exists(my_image_path_at_s3)
在另一个进程(Django应用程序) - 返回false。
仅重启Django应用程序导致它在s3识别新文件。
这似乎是缓存,但我没有设法找到它的位置......
任何提示?