複数のRailsアプリケーション間でアップロードされたファイルを共有
-
13-09-2019 - |
質問
私は、すべてが単一のデータベースを共有することが、複数のアプリケーション(管理アプリケーション、「公共」/非管理アプリケーションとWebサービス・アプリケーション)を持っています。
私はモデルや他のコードの適切なを共有するためのアプリケーションを得ているので、私はそれぞれに同じコードの複数のコピーを持っていません。しかし、私が設定するには、まだきた一つのタスクは、アプリケーション間でアップロードされますファイルを共有する方法です。私は正常に私のアプリケーションにファイルをアップロードするためにペーパークリップするを使用していますが、それはアプリケーションにファイルをアップロードした場合アップロードをやってます。
理想的には、私は、Webサービスからすべてのファイルを提供できるようにしたいと思います。私の考えは、私は新しいファイルがWebサービスのファイル構造で作成したファイルを持っているアプリケーションのいずれかにアップロードされるたびに実行されたタスクのいくつかのタイプを必要とするだろうということでした。
私は(私は、同様のアプリケーションスイートでこれを達成する方法である)データベースにファイルをロードした場合、私は簡単に単一のアプリケーションからファイルを提供成し遂げる可能性が知っているが、それは行くには最高のルートだ場合、私はわからないんだけどファイルの提供/管理します。私は、データベース内のファイルを保存し、Webサービスを持っていたていたもう一つのアイデアは、それらを「提供」し、それが最初のリクエストに応じてディスク上のファイルを作成した管理します。ファイルの最初の要求の後、Webサービスは、ディスクからではなく、データベースからファイルを提供します。
誰もがこれを実現する最良の方法が何であるか上の任意のアイデアを持っていますか?または任意のより良いアイデア?
誰もが被写体に持っている可能性のあるフィードバックのために事前にありがとうございます。
解決
は、セットアップのようなものを持っている場合、私は、あなたのフロントエンドWebサーバ(ないRailsの)によって直接提供される共有の場所にそれらを置くことをお勧めしたい。この例では、上のフォルダを指しファイルと呼ばれる場所を提供いますディスク。次に、あなたのクリップのオプションでは、保存場所を変更します。
has_attached_file :image,
:url => "/files/:basename.:extension",
:path => "/var/htdocs/public/files/:basename.:extension"
他のヒント
あなたは同じUNIX / Linuxシステム上のすべてのアプリケーションを実行していますか?あなたは、画像を含むフォルダを共有するためにシンボリックリンクを作成しようとしたことがありますか?目標は、同じ場所にすべての画像を保存することです。添付ファイルの作成のための複雑なフックでスローする必要がなくなります。
ペーパークリップのデフォルトの保存のものによって:RAILS_ROOT /公共/システム/:添付ファイル/:ID /:スタイル/:ファイル名あなたが衝突を心配する必要はありませんデータベースを共有している場合。そして、あなたはただ、各アプリが使用するシステムフォルダを作成する必要があります。
あなたはマスターとして1つのアプリの公開/システムフォルダを使用し、または完全に新しいものを作成することができます。マスターでない他のすべてのシステムフォルダ上のこの時点から1フォルダをスレーブと呼ぶことにします。あなたのマスターを選択したら、それは、マスター・フォルダに各スレーブフォルダ内のすべてを動かすのと同じくらい簡単です。スレーブフォルダを削除すると、マスター・フォルダへのシンボリックリンクに置き換えるます。
サンプルコマンド移行し、クリップのデフォルト与えられたシンボリックリンクと交換するように設定。これは、これを試みる前に、サーバーを停止するには、おそらく良いでしょう。
$ mv /path/to/slave/project/public/system/* /path/to/master/system
$ mv /path/to/slave/project/public/system.bak
$ ln -s /path/to/master/system /path/to/slave/project/public/system
あなたは移行が成功であることを確認できたらバックアップを削除することができます:
$ rm /path/to/slave/project/public/system.bak