доступ к файлам, хранящимся на сервере из приложения Sinatra - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть облачный сервер RackSpace, на котором я размещаю приложение Sinatra. У меня есть общедоступный каталог в моем приложении, где я храню свои текущие стили, сценарии и т. Д. У меня есть дополнительные файлы, хотя я не хочу обновлять и передавать их при каждом развертывании. Я использую git и Vlad для развертывания, поэтому, чтобы избежать этого, мой текущий процесс

  • вносить локальные изменения и обновления
  • обновить мой локальный репо
  • push to git
  • Запустите vlad: обновление
  • затем вручную подключите ssh к моему серверу и перенесите mp3-файлы и другие материалы, которые мне нужны в проекте, в общую папку текущих выпусков

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

спасибо

1 Ответ

0 голосов
/ 18 декабря 2011

Если вы хотите обслуживать статические файлы непосредственно из Sinatra (т. Е. У вас нет Apache или Nginx, настроенных для их обслуживания), вы можете использовать Rack::Static. Это будет работать, только если все статические файлы обслуживаются из подкаталогов другого местоположения. Например, если у вас есть набор mp3-файлов, хранящихся в /home/other_user/files/mp3s, и вы обращаетесь к ним как http://example.com/mp3s/foo.mp3, тогда вы можете использовать промежуточное программное обеспечение , например:

use Rack::Static, :urls => ['/mp3s'], :root => '/home/other_user/files/mp3s'

Если у вас есть другие подкаталоги, из которых вы хотите получать файлы, например, '/ images', просто добавьте их в массив :urls: :urls => ['/mp3s', '/images'].

Если вы хотите иметь доступ к файлам в «базе» URL, например, http://example.com/foo.mp3, то Rack::Static не будет работать. В этом случае нам нужно проверять каждый запрос к каталогу, и если соответствующий файл существует, в противном случае продолжить выполнение запроса. (Сам Синатра должен делать что-то подобное при проверке каталога public).

Самый простой способ добиться этого, вероятно, использовать Rack::TryStatic из rack-contrib:

require 'rack/contrib' #install rack-contrib first
use Rack::TryStatic, :urls => ['/'], :root => '/home/other_user/files/mp3s'

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

...