2016-12-02 2 views
1

Я использую приложение rails 4 на Bluemix, прикрепляя файлы с помощью paperclip gem. Как мы все знаем, 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 построен на вершине облачного литейного производства и имеет эфемерную файловую систему, то есть, как только приложение прекратит работу с платформой, оно вернет обратно эту файловую систему и создаст новый продукт после перезапуска приложения.

Запись в локальную файловую систему не рекомендуется для облачных приложений, и вам может потребоваться перепроектировать приложение для работы с Bluemix. Одним из решений является сохранение ваших файлов в вашей базе данных, а не только ссылка.

Вы можете найти более подробную информацию об этом link.

+0

Спасибо за ваш комментарий @alex. К сожалению, так работает мой драгоценный камень, и нет никаких настроек, которые я могу создать, чтобы сохранить файл в фактической базе данных, вместо того, чтобы сохранять его в файловой системе. У меня будет несколько резервных копий, отправив файл в папку с папкой в ​​одно и то же время, но нет ли возможности кэшировать информацию из файловой системы в Bluemix? –

+0

нет опции кэширования в файловой системе Bluemix. Все, что было создано во время выполнения в файловой системе, будет потеряно при перезапуске приложения. –

+0

@ VladBalanescu - Один хакерский метод, который я использовал для некоторых проектов, - использовать поддержку SSHFS (fusemount) в приложении Bluemix CF для сопоставления с экземпляром IBM Container (Docker) с поддержкой ssh, который использует постоянный том. В зависимости от размера файлов он может работать нормально. Вы можете получить смысл для подхода [здесь] (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) имеет эфемерное хранилище. Это хранилище доступно только для жизни этого конкретного экземпляра. При повторном развертывании приложения вы получите новый экземпляр приложения, и любые данные в предыдущем экземпляре приложения будут недоступны.

Существует хорошее объяснение того, почему лучше всего avoid writing to the local file system при разработке приложения для Bluemix/Cloud Foundry.

Возможно, вы захотите взглянуть на драгоценный камень, например CarrierWave to store the files on Amazon S3 или на другой постоянный магазин. Также есть Paperclip, который предлагает аналогичную функциональность.

Смежные вопросы