Heroku で Django + Celery を実行しています。バックグラウンドで Celery タスク (Heroku ワーカー) でファイルを作成し、次の方法を使用して 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で新しいファイルが認識されました。
キャッシュのようですが、どこにあるのかわかりませんでした...
ヒントはありますか?