2016-12-02 1 views
1

私は、クリップクリップgemを使用してファイルを添付して、Bluemixでrails 4アプリケーションを使用しています。わかっているように、Paperclipはそのファイルへの参照を実際のdbに保存し、物理ファイルを/publicの場所に保存しています。アプリケーションの再起動の間にBluemixファイルを維持する方法

私はここ

/home/vcap/app/public/files/submissions/files/140/original/Successful_Submission.pdf

を救われた後、ファイル検索が完全に正常に動作しているこのデシベルにファイルを提出しています。アプリを再起動すると、次のようになります。

Errno::ENOENT (No such file or directory @ rb_file_s_lstat - /home/vcap/app/public/files/submissions/files/140/original/Successful_Submission.pdf): 

これはBluemixがこの情報を保持していないためです。アプリの再起動の間にこれらのファイルを保持するにはどうすればよいですか?

答えて

2

Bluemixは、Cloud Foundryの上に構築され、一時的なファイルシステムを持っています。つまり、アプリケーションが停止すると、アプリケーションを再起動するとプラットフォームはそのファイルシステムを取り戻し、まったく新しいファイルシステムを作成します。

クラウドアプリケーションにはローカルファイルシステムに書き込むことはお勧めできません。また、Bluemixを使用するにはアプリケーションを再設計する必要があります。 1つの解決方法は、参照だけでなく、データベースにファイルを保存することです。

この詳細については、linkをご覧ください。

+0

@alexさんへのご意見ありがとうございます。残念ながら、これは私の宝石の仕組みであり、ファイルシステムに保存するのではなく、実際のデータベースにファイルを保存するための調整はありません。私は同じ時間にボックスフォルダにファイルを送信することによっていくつかのバックアップがありますが、Bluemixのファイルシステムから情報をキャッシュする機会はありませんか? –

+0

Bluemixファイルシステムにはキャッシュオプションはありません。アプリケーションを再起動すると、ファイルシステムの実行時に作成されたすべてが失われます。 –

+0

@VladBalanescu - 私がいくつかのプロジェクトで使用した1つのハックテクニックは、Bluemix CFアプリケーション内のSSHFS(fusemount)サポートを使用して、持続ボリュームを使用するssh対応のIBM Container(Docker)インスタンスにマップすることです。ファイルのサイズによっては、正常に動作することがあります。 [ここ](https://github.com/joshisa/drupalstart/blob/master/bluezone/configtweaks/.profile.d/fusemount.sh)と[ここ](https://)のアプローチを理解することができます。 github.com/joshisa/drupalstart/blob/master/README.md#sshfs-persisted-storage-optional) –

0

Bluemix(Cloud Foundryに基づいています)の各アプリケーションインスタンスには一時的な記憶域があります。このストレージは、特定のインスタンスの存続期間中のみ使用できます。アプリケーションを再デプロイすると、新しいアプリケーションインスタンスが作成され、以前のアプリケーションインスタンスのデータにはアクセスできなくなります。

なぜBluemix/Cloud Foundryのアプリケーションを設計するときにavoid writing to the local file systemに最適なのかについての良い説明があります。

CarrierWave to store the files on Amazon S3や別の永続ストアのような宝石を見たいかもしれません。同様の機能を提供するPaperclipもあります。

関連する問題