2012-08-25 13 views
12

現在、私はHerokuでホストしているアプリで、ユーザーは写真を投稿できます。最初は、これらの写真をファイルシステムに保存することを考えていました。データベースに保存することは明らかに悪いことです。Herokuの永続ファイルシステムはありませんか?

しかし、Herokuには永続的なファイルシステムはなく、一時的なファイルシステムしかないようです。これは本当ですか、もしそうなら、写真やその他のファイルの保管に関する私の選択肢は何ですか?

答えて

18

本当です。 Herokuでは、クラウドアプリケーションを作成できますが、これらのクラウドアプリケーションは「永続的」ではありません。Amazon EC2で複数回複製できるインスタンス(「スラッグ」)です(そのため、Herokuではスケーリングが簡単です)。あなたのアプリケーションの新しいバージョンをプッシュする場合、スラッグは再コンパイルされ、以前のインスタンスでファイルシステムに保存したファイルは失われます。

あなたの最良の賭けは、ユーザーが投稿した写真をCDNに保存することです。あなたはHerokuにおり、HerokuはAWSを使用しているため、Amazon S3を推奨し、オプションでCloudFrontを有効にすることもできます。

これはHerokuの一時的な「制限」を回避するだけでなく、CDNがはるかに高速で、ユーザーにとってWebアプリケーションとユーザーエクスペリエンスに優れたサービスを提供するためにも有益です。

6

使用している技術によっては、アップロードをS3(Amazonのストレージサービス)にストリーミングする可能性が最も高いです。クライアントライブラリを使用してS3と対話することで、ファイルを簡単に投稿したり取得したりすることができます。 Botoは、Python用のクライアントライブラリの例です。これらはすべての一般的な言語用に存在します。

また、Herokuファイルシステムも共有されていないことに留意してください。つまり、アップロードを処理するアプリケーションと同じアプリケーション(つまり、ワーカープロセスではなく)でファイルをS3に配置する必要があります。可能であればアップロードをメモリに読み込み、ディスクに書き込まずにS3に直接投稿してください。アップロードの速度が向上します。

HerokuはAWSでホストされているため、S3へのストリームは非常に高速に処理されます。あなたがローカルで開発しているときは、それを覚えておいてください。

関連する問題