0

私は Rails の初心者なので、これをどのように構築すればよいかわかりません。何らかの情報を得たいと思っています。

基本的に、アプリのユーザーに表示したい画像 (予測可能なファイル名) がいくつかあります。リモートホストからそれらを取得しますが、もちろん、リクエストごとにそこにホットリンクしたくないので、何らかの方法でサーバーにキャッシュしたいと思います. 理想的には、誰かが最初に画像をリクエストしたときに、リモート サーバーからダウンロードしてユーザーに提示し、同じ画像に対するその後のリクエストでは、他の静的アセットと同様に提供およびキャッシュします。

通常、イメージをローカル ファイル システムのフォルダー内のどこかにダウンロードするだけpublicですが、このアプリを Heroku で実行しているため、永続的な書き込みアクセス権がありません。私の場合、これらすべてを処理するための良い戦略は何でしょうか? コードで完全な解決策を探しているのではなく、いくつかのポインターを探しています。ありがとう!

4

1 に答える 1

1

これが私がそれにアプローチする方法です:

まず、これらの画像のいずれかを参照するすべての場所で、代わりに独自のアプリのコントローラーでアクションを呼び出します。次に、そのコントローラー アクションを記述して、次のことを行います。

  1. ファイル名を指定すると、
  2. イメージが S3 バケットに存在するかどうかを確認します。その場合は、S3 リンクをそれに戻します。
  3. そうでない場合は、ダウンロードして S3 に保存します。次に、S3 リンクをそれに戻します。

あなたは Heroku を使っているので、イメージを取得する (そして S3 に保存する) ために、そのアクションでdelayed_job を開始する方が良いかもしれません。次に、ビューで、イメージが利用可能かどうかを定期的にそのコントローラー アクションに尋ねるポーリング メカニズムを用意します。そうでない場合は読み込みアイコンを表示し、ある場合は画像 (S3 上の画像を指す URL) を表示します。このルートに進むと、画像がキャッシュされるのを待っている間、dyno の 1 つが拘束されることはありません。

もちろん、すべてのリモート イメージを自分で事前にキャッシュできれば、作業は簡素化できます。おそらく、これらすべての画像をダウンロードして S3 に保存する rake タスクです。

お役に立てれば。

于 2012-07-04T19:06:37.280 に答える