2016-12-02 50 views
1

我正在Bluemix上使用rails 4應用程序,並使用paperclip gem附加文件。衆所周知,Paperclip會在實際數據庫中保存對該文件的引用,將物理文件保存到/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工作。一種解決方案是將文件保存在數據庫中,而不僅僅是參考。

你可以找到關於此link更多細節。

+0

感謝您的評論@alex。不幸的是,這就是我的創業板的工作方式,我可以將這些文件保存在實際的數據庫中,而不是將其保存到文件系統中。通過將文件同時發送到box文件夾,我將擁有一些備份,但是沒有機會在Bluemix中緩存文件系統中的信息嗎? –

+0

Bluemix文件系統中沒有緩存選項。在重新啓動應用程序時,在文件系統中運行時創建的所有內容都將丟失。 –

+0

@VladBalanescu - 我在某些項目中使用的一種黑客技術是在Bluemix CF應用程序中使用SSHFS(fusemount)支持來映射到使用持久卷的啓用了ssh的IBM Container(Docker)實例。根據文件的大小,它有時可以正常工作。您可以瞭解[這裏]的方法(https://github.com/joshisa/drupalstart/blob/master/bluezone/configtweaks/.profile.d/fusemount.sh)和[here](https:// github.com/joshisa/drupalstart/blob/master/README.md#sshfs-persisted-storage-optional) –

0

上Bluemix(它是基於雲鑄造)每個應用實例有短暫的存儲。此存儲僅適用於該特定實例的生命週期。當你重新部署你的應用程序時,你會得到一個新的應用程序實例,以前的應用程序實例的任何數據將無法訪問。

還有爲什麼它設計用於Bluemix/Cloud Foundry的應用程序時,最好avoid writing to the local file system一個很好的解釋。

你可能想看看像CarrierWave to store the files on Amazon S3的寶石或其他持久性存儲。還有Paperclip,它提供了類似的功能。

相關問題