Статическая маршрутизация страниц в Синатре (Ruby) - PullRequest
13 голосов
/ 04 апреля 2010

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

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

Ответы [ 6 ]

20 голосов
/ 04 апреля 2010

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

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

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

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

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

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

6 голосов
/ 01 октября 2010

Просто установите 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 голосов
/ 15 июля 2015
require 'sinatra'

get '/' do
  send_file File.join(settings.public_folder, 'index.html')
end

Как описано в Обслуживание статических файлов с помощью Sinatra

3 голосов
/ 11 февраля 2011

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

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

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

3 голосов
/ 04 апреля 2010

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

2 голосов
/ 07 июля 2013

Для решения этой проблемы существует гем "sinatra-index".

https://github.com/elitheeli/sinatra-index

...