4

複数のアプリケーション(管理アプリケーション、「パブリック」/非管理アプリケーション、およびWebサービスアプリケーション)があり、それらはすべて単一のデータベースを共有しています。

必要に応じてモデルや他のコードを共有するアプリケーションを入手したので、それぞれに同じコードの複数のコピーを持っていません。ただし、まだ構成していない1つのタスクは、アプリケーション間でアップロードされるファイルを共有する方法です。Paperclipを使用してファイルをアプリケーションに正常にアップロードしていますが、アップロードを実行しているアプリケーションにファイルをアップロードする場合。

理想的には、Webサービスからすべてのファイルを提供できるようにしたいと思います。私の考えは、Webサービスのファイル構造でファイルを作成するには、新しいファイルがいずれかのアプリケーションにアップロードされるたびに、ある種のタスクを実行する必要があるということでした。

ファイルをデータベースにロードした場合(これは、同様のアプリケーションスイートでこれを達成した方法です)、単一のアプリケーションからファイルを簡単に提供できることはわかっていますが、それが管理に最適なルートかどうかはわかりません。ファイルを提供します。私が持っていたもう1つのアイデアは、ファイルをデータベースに保存し、Webサービスにファイルの「提供」を管理させ、最初の要求でディスク上にファイルを作成させることでした。ファイルの最初の要求の後、Webサービスはデータベースからではなくディスクからファイルを提供します。

これを達成するための最良の方法が何であるかについて誰かが何か考えを持っていますか?またはより良いアイデアはありますか?

この件に関して誰かからのフィードバックを事前に感謝します。

4

2 に答える 2

3

そのような設定がある場合は、フロントエンドWebサーバー(Railsではなく)によって直接提供される共有の場所にそれらを配置することをお勧めします。この例では、ディスク上のフォルダーを指すファイルと呼ばれる場所を提供しています。次に、ペーパークリップオプションで、保存場所を変更します。

has_attached_file :image,  
   :url => "/files/:basename.:extension",  
   :path => "/var/htdocs/public/files/:basename.:extension" 
于 2009-12-07T16:21:12.890 に答える
0

すべてのアプリを同じUNIX/Linuxシステムで実行していますか?画像を含むフォルダを共有するためのシンボリックリンクを作成してみましたか?目標は、すべての画像を同じ場所に保存することです。アタッチメントを作成するために複雑なフックを投入する必要がなくなります。

Paperclipはデフォルトで、物事を:rails_root / public / system /:attachment /:id /:style /:filenameに保存します。データベースを共有している場合は、衝突について心配する必要はありません。そして、各アプリで使用するシステムフォルダを作成する必要があります。

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
于 2009-12-07T16:17:13.250 に答える