Совместное использование загруженных файлов между несколькими приложениями Rails - PullRequest
4 голосов
/ 07 декабря 2009

У меня есть несколько приложений (приложение администратора, «общедоступное» / приложение без прав администратора и приложение веб-службы), которые все совместно используют одну базу данных.

Я получил приложения для обмена моделями и другим кодом, где это уместно, поэтому у меня нет нескольких копий одного и того же кода в каждой. Тем не менее, единственная задача, которую мне еще предстоит настроить, - это обмен файлами, которые загружаются между приложениями. Я использую Скрепка для успешной загрузки файлов в мои приложения, но если он загружает файлы в приложение, выполняющее загрузку.

В идеале я хотел бы иметь возможность обслуживать все файлы из веб-службы. Моя идея заключалась в том, что мне нужно будет выполнять какой-то тип задачи каждый раз, когда новый файл загружается в любое из приложений, чтобы файл создавался в файловой структуре веб-службы.

Я знаю, что мог бы легко выполнить обслуживание файлов из одного приложения, если бы я загружал файлы в базу данных (как я это делал в аналогичном наборе приложений), но я не уверен, что это лучший путь для управления / обслуживания файлов. У меня была еще одна идея: хранить файлы в базе данных и заставить веб-службу управлять «обслуживанием» их и создавать файл на диске по первому запросу. После первого запроса файла веб-служба будет обслуживать файл с диска, а не из базы данных.

У кого-нибудь есть идеи о том, как лучше всего это сделать? Или есть идеи получше?

Заранее благодарим вас за любые отзывы на эту тему.

Ответы [ 2 ]

3 голосов
/ 07 декабря 2009

Я бы порекомендовал поместить их в общее местоположение, которое обслуживается непосредственно вашим интерфейсным веб-сервером (не Rails), если у вас есть такие настройки, в этом примере это обслуживает местоположение, называемое файлами, которое указывает на папку диск. Затем в настройках скрепки измените место сохранения.

has_attached_file :image,  
   :url => "/files/:basename.:extension",  
   :path => "/var/htdocs/public/files/:basename.:extension" 
0 голосов
/ 07 декабря 2009

Работаете ли вы со всеми приложениями в одной системе UNIX / Linux? Вы пытались создать символические ссылки для общего доступа к папке, содержащей изображения? Цель состоит в том, чтобы сохранить все изображения в одном месте. Устранение необходимости добавлять сложные крючки для создания вложений.

Paperclip по умолчанию хранит вещи по адресу: rails_root / public / system /: attachment /: id /: style /: filename. Если вы используете общую базу данных, вам не придется беспокоиться о коллизиях. И вам просто нужно создать системную папку для использования каждым приложением.

Вы можете использовать общую / системную папку одного приложения в качестве главной или создать совершенно новую. С этого момента все другие системные папки, которые не являются главными, будут относиться к подчиненным папкам. После того, как вы выбрали своего мастера, все так же просто, как переместить все в каждой папке подчиненного в мастер-папку. Удаление подчиненных папок и замена их символической ссылкой на главную папку.

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

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...