web-dev-qa-db-ja.com

Ruby on Rails画像を保存する方法)とは何ですか?

iOS で開発していますが、 [〜#〜] php [〜#〜] バックエンドからRuby onに切り替えていますRails。交換形式は [〜#〜] json [〜#〜] です。

Googleで「Railsに画像を保存」をすばやく検索すると、ほぼすべての結果が画像データをblobとしてデータベースに保存することになります。誤解しているかもしれませんが、データベースに画像データを保存することは、ファイルの場所( '/img/subcat/4656.png'へのリンクを保存するのではなく)に時間とスペースを浪費していると感じています。 。

PHPでは、データを受け取り、ファイル名を生成し、そのファイルをディスクに保存し、データベースをディスク上のイメージの場所で更新するのはかなり標準的なことです。これはRuby on Rails)でも同じですか、それとも、知らない組み込みのActiveRecordイメージ機能がありますか?

9
user

過去に私がやったことは、ペーパークリップを Amazon S ​​と CloudFront CDN で使用して配信を高速化することです。 Paperclipは、箱から出してすぐにS3ストレージを非常にうまくサポートします: S3ストレージ構成オプションのドキュメント を参照してください。

  1. CloudFrontディストリビューションをセットアップして、画像リクエストをS3バケットに転送し、その他の静的アセットのリクエストをRuby on Rails=アプリケーションに転送します(または、それらをアップロードすることもできます。 S3にも同様ですが、それはこの質問の範囲外です)。
  2. [〜#〜] cname [〜#〜] CloudFrontディストリビューションを指すように制御するドメイン(assets.example.comなど)。
  3. ペーパークリップ構成で、s3_Host_alias: assets.example.comを設定します。これにより、生成された RLs がCloudFrontディストリビューションホストを使用するために保存された画像リソースを生成します。
  4. Ruby on Rails configuration)では、config.action_controller.asset_Host = http://assets.example.comを実行できます。Ruby on RailsアセットURLは、キャッシュ/高速配信のためにCloudFrontディストリビューションも使用します。

それはかなり大ざっぱですが、うまくいけば、いくつかの有用なリソースの方向性を示します。もちろん、これは1つの解決策にすぎませんが、データベースで数十万の画像添付ファイルを処理している状況で私にとってうまくいった解決策です。

(このケースでは不要または有用でない可能性のある高度な手順として、CloudFrontディストリビューションにassets0.example.comassets1.example.comなどの複数のCNAMEを設定することもできます。両方のペーパークリップs3_Host_aliasそしてaction_controller.asset_Hostは、異なるページを使用してURLを決定的に(アセットに基づいて)生成できるラムダを取得できます。ブラウザーが制限するため、同じホストで多数のホストをダウンロードする場合の並列化が向上します。同じホストへの最大同時接続数。)

4
gregates

私はいくつかの宝石を試しましたが、今は FineUploaderPaperclip と一緒に使用しています

FineUploaderは、アップロードの進行状況、ドラッグアンドドロップ、複数のファイルのアップロードなど、多くのGUIを処理します。 S3ではなくサーバーに画像を保存したいので、Paperclipを使用しています。

私たちが通常行うことは、最初からコンテンツを再作成するのではなく、すぐに使える構成可能なソリューションを探すことです。 Paperclipを使用して画像を保存し、StateMachineを使用して画像を変換し、ファイル名に基づいてカテゴリに入れます。私はあなたと同じ質問をしました、そしてこれは私の最も効果的な解決策でした、それが私がそれを共有する理由です。

3
JeroenKnoops