Подтвердить что ты не робот

Маршрутизация статической страницы в Sinatra (Ruby)

Вы можете обслуживать статические файлы с помощью Sinatra, поместив их в public/ (по умолчанию). В настоящее время у меня есть index.html, но как я могу сделать корневую точку для этого файла без необходимости синтаксического анализа это как шаблон?

Чтобы быть ясным, я могу успешно получить доступ к /index.html, и я бы хотел, чтобы маршрут / был тем же статическим файлом, но без перенаправления. Любая идея, как это сделать?

4b9b3361

Ответ 1

Вероятно, лучший ответ в конечном итоге наступит, пока это не будет моим выстрелом.

Если это не то, что вы хотите:

get '/' do
  redirect '/index.html'
end

Вы можете сделать что-то вроде этого:

get '/' do
  File.new('public/index.html').readlines
end

Я бы пошел с первым, хотя, не уверен, почему вы хотите избежать перенаправления

Ответ 2

Просто установите enable :static внутри вашего класса приложения. Например:

class App < Sinatra::Base
  # Set the app root; this is where the 'public' and 'views'
  # directories are found (by default).
  set :root, File.expand_path("#{File.dirname(__FILE__)}/../app")

  # Allow the app to serve static files from the 'public' directory in :root
  enable :static
end

Ответ 4

используя пассажир, это, кажется, работает прямо из коробки. имеющий файл index.html в общедоступном каталоге, и никакая маршрутизация не вызывает index.html при доступе к корневому URL.

Ответ 5

Я думаю, что это только проблема, потому что у Sinatra/Rack нет концепции файла по умолчанию для обслуживания, если вы просто переходите к /. В веб-сервере, таком как Apache или Nginx, об этом заботятся и обычно по умолчанию используется index.html index.htm (если он существует, он будет обслуживаться при переходе в каталог без фактического имени файла в конце).

Когда все говорят, что это встроено в Passenger, я думаю, что они действительно означают, что он встроен в Apache/Nginx. Apache/Nginx будет проверять, существует ли статический файл и обслуживать его, если запрос не будет доставлен на стойку, что является потрясающим для производительности.

Я бы не хотел настраивать перенаправление на страницу 404, так как этот тип нарушает всю идею HTTP: должна быть одна конечная точка для всего, что конечная точка должна вернуть истинное состояние этой конечной точки. Это означает, что если вы перейдете к /asdf, вы хотите, чтобы веб-сервер сообщал 404, потому что это то, что на самом деле происходит. Если вы делаете переадресацию, теперь ваш сайт говорит: "У меня было что-то здесь, но оно перемещалось", а затем перенаправляемая вами страница, даже если она говорит 404 в тексте на странице, фактически сообщается в Интернете сервер как 200, то есть "все хорошо с этой страницей!"