我在 Heroku 上运行 Django + Celery。我在后台(Heroku 工作人员)的 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 识别新文件。
这似乎是缓存,但我没有设法找到它在哪里......
有什么提示吗?