web-dev-qa-db-ja.com

Herokuで画像をホストできますか?それともS3が必要ですか?

私は自分のWebアプリを展開しています(それは企業クライアント用です)。したがって、ユーザーは画像を追加せず、ビジネスのみを追加します。

Herokuにデプロイしましたが、画像がまだ表示されています。いつS3を使用する必要がありますか?サイトには全部で100枚ほどの画像があり、サイズは週に7枚を超えるように変化します。 Herokuだけを使用できますか?

25
Gibson

短い答え:ユーザーまたは管理者に画像のアップロードを許可する場合、画像が突然消えてしまうため、Herokuのファイルシステムを使用しないでください。

Herokuドキュメント で説明されているように:

各dynoは独自の短命なファイルシステムを取得し、最新にデプロイされたコードの新しいコピーを備えています。 dynoの存続期間中、実行中のプロセスはファイルシステムを一時的なスクラッチパッドとして使用できますが、書き込まれたファイルは他のdynoのプロセスからは見えず、書き込まれたファイルはdynoが停止または再起動したときに破棄されます。

つまり、Herokuファイルシステムにユーザーがアップロードした画像は、Pushごとに消去されるだけでなく、dynoが再起動されるたびに消去されます(これは、頻繁にpingを実行してスリープ状態にならないようにする場合でも)。

2番目のWeb dynoの使用を開始すると、他のdynoのファイルシステムを読み取ることができないため、画像は1つのdynoからのみ表示されます。これにより、ユーザーが画像を表示できる場合と表示されない場合がある奇妙な問題が発生します。

つまり、 外部ファイルストアへのパススルーファイルのアップロード を実装すると、Herokuファイルシステムに画像を一時的に保存できます。

47
fivedigit

アセットパイプライン

FiveDigitの答えはとても良いです-考慮すべきことは他にもあります。 Railsでの asset pipeline の役割

お持ちの画像がassetsとして使用されている場合(つまり、レイアウトで使用されているため、ユーザーは変更できません)、assets/imagesに保存できます。フォルダ。アプリケーションで保持できるアセットの数に制限はありませんが、それらが何であるかを確認する必要があります。これらはアプリケーションの操作を支援するファイルです。 アップロード/操作できるファイルではない

アセットパイプラインは、JavaScriptおよびCSSアセットを連結および縮小または圧縮するためのフレームワークを提供します。また、これらのアセットを他の言語で作成する機能や、CoffeeScript、Sass、ERBなどのプリプロセッサも追加されます。

アセットパイプラインは、アプリケーションをHerokuなどのサーバーにデプロイすると、ファイルのstylesheetimage、およびjsファイルを圧縮およびフィンガープリントします。つまり、これらのファイルが変更されない場合は、そこに保存できます。

-

S3

S3のようなものを使用する理由は、画像ファイルが変更できるように設計されている場合です(ユーザーは画像をアップロード/編集できます)。 Herokuのファイルシステムに関係なく、イメージがDBの変更に関連付けられている場合は、それらの中央ストアを保持する必要があります-サーバーを変更する場合は、それらにアクセスできる必要があります。

これを行うには、ファイルがどのように機能するかを理解しておく必要があります。ファイルはユーザーによって常に操作されるのでしょうか。その場合は、S3をアプリに統合することを検討する必要があります

9
Richard Peck