2012-11-27 11 views
5

8台のマシンで実行されているRailsアプリケーション(ロードバランシング)でPaperclipイメージのアップロードを動作させるにはどうすればよいですか?ペーパークリップ+ロードバランスマシンを搭載したレール

ユーザーは、アプリで画像をアップロードできます。画像はいずれかのマシンに保存されます。ユーザーは後でイメージを要求しますが、別のマシンから要求されているため、イメージが見つかりません。

このタイプの問題の回避策を教えてください。 AWSやクラウドサービスは使用できません。画像は社内に保存する必要があります。

ありがとうございました。

+0

あなたがAWSを使用できない場合は、データベースまたは独自のファイルストレージソリューションで画像を配置するのどちらかでしょう。あなたのアプリケーションサーバーにそれらを保存することは不可能です。あなたがそれらのマシンの1つを失うと、あなたはイメージを失ってしまいました。 –

答えて

8

解決策の1つは、public/systemのルートとなる共有フォルダをマウントするか、クリップクリップイメージが格納されているフォルダにNFSを使用することです。

しかし、すべての作業を行うことを検討するためにいくつかあります:あなたのクリップの画像奉仕するために専用されているだけの資産が含まれています

  • 利用専用サーバー、このようにハードドライブ(複数可)
  • NFSは高価になる可能性があります。これを使用して、AppサーバーからAssetサーバーにのみファイルを書き込むことができます。ロードバランサまたはリバースプロキシまたはWebサーバーを構成して、アセットサーバーからすべてのイメージを直接取得する必要があります。アプリケーションサーバーにNFS経由で行う必要はありません。
  • アセットサーバーではRAIDシステムが推奨されますが、もちろん
  • アセットサーバーの2つ目は、同じ仕様であることをお勧めします。バックアップサーバーとして動作させることができ、定期的にペーパークリップのイメージをrsyncすることができます。マスターアセットサーバがダウンすると、これに切り替えることができます。
  • 共有NFSフォルダをマウントするときは、softオプションを使用し、高速ローカルネットワーク接続(たとえば、mount -o soft 10.0.0.1:/export/shared_image_folder)を使用してマウントします。 softオプションを指定せず、アセットサーバがダウンすると、Rubyインスタンスはサーバが上がるのを待っています。すべてが立ち往生し、ウェブサイトが見下ろす。これを難しい方法で学んだ...

これはNFSを使用する際の一般的なガイドラインです。私は数十万のイメージを持つ非常に大きな制作サイトでそれを使用しています。

+0

どのようにして、paperclipにmachine1から共有マウントされたフォルダにファイルを書き込むように指示できますか? – alste

+0

共有NFSフォルダーを 'マウント 'する必要があります。 linuxでは、 'mount'はNFSを使ってネットワークフォルダをマウントしようとしますが、私の答えを編集します。もちろん、まずnfsサーバーをセットアップし、ディストリビューションに応じて必要なパッケージをインストールする必要があります。 –

1

NFSなどのファイル共有を使用しない場合は、データベースにイメージを保存できます。ここではペーパークリップのための:databaseストレージタイプを提供逸品です:

https://github.com/softace/paperclip_database