2

我在 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 识别新文件。

这似乎是缓存,但我没有设法找到它在哪里......

有什么提示吗?

4

0 回答 0