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