Обслуживание статических файлов с помощью Sinatra - PullRequest
137 голосов
/ 13 марта 2010

У меня есть веб-сайт на одну страницу, использующий только HTML, CSS и JavaScript.Я хочу развернуть приложение в Heroku, но не могу найти способ сделать это.Сейчас я пытаюсь заставить приложение работать с Sinatra.

.
|-- application.css
|-- application.js
|-- index.html
|-- jquery.js
`-- myapp.rb

И вот содержимое myapp.rb.

require 'rubygems'
require 'sinatra'

get "/" do
  # What should I write here to point to the `index.html`
end

Ответы [ 14 ]

164 голосов
/ 05 августа 2011

Вы можете использовать помощник send_file для обслуживания файлов.

require 'sinatra'

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

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

128 голосов
/ 13 марта 2010

Без дополнительной настройки Sinatra будет обслуживать активы в public. Для пустого маршрута вы хотите отобразить индексный документ.

require 'rubygems'
require 'sinatra'

get '/' do
  File.read(File.join('public', 'index.html'))
end

Маршруты должны возвращать String, который становится телом ответа HTTP. File.read открывает файл, читает файл, закрывает файл и возвращает String.

61 голосов
/ 11 апреля 2012

Вы можете просто разместить их из общей папки, и им не нужны маршруты.

.
-- myapp.rb
`-- public
    |-- application.css
    |-- application.js
    |-- index.html
    `-- jquery.js

В myapp.rb

set :public_folder, 'public'

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

Ссылка на общедоступную подпапку

set :public_folder, 'public'
get "/" do
  redirect '/subfolder/index.html' 
end
1009

Пример:
./public/stylesheets/screen.css
Будет доступно через '/stylesheets/screen.css', маршрут не требуется

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

Имейте в виду, что в рабочем режиме ваш веб-сервер может автоматически отправлять index.html, чтобы запрос никогда не поступал в Sinatra. Это лучше для производительности, так как вам не нужно проходить через стек Sinatra / Rack только для обслуживания статического текста, что и делает Apache / Nginx.

12 голосов
/ 14 апреля 2010

Синатра должен позволять вам обслуживать статические файлы из общего каталога , как описано в документации :

Статические файлы

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

Обратите внимание, что имя общедоступного каталога не включено в URL. Файл ./public/css/style.css доступен как example.com/css/style.css.

3 голосов
/ 07 мая 2015

Добавить строку ниже в основной файл rb

set :public_folder, 'public'
2 голосов
/ 29 июля 2015
require 'rubygems'
require 'sinatra'

set :public_folder, File.dirname(__FILE__) + '/../client'
#client - it's folder with all your file, including myapp.rb

get "/" do
  File.read('index.html')
end
2 голосов
/ 28 января 2015

ОБНОВЛЕННЫЙ ОТВЕТ : Я связал все вышеперечисленное, не имея возможности загружать содержимое css, js .... и т. Д. Единственное, что загружалось, это index.html ... а остальные шли = >> 404 error

Мое решение: папка приложения выглядит следующим образом.

index.rb == >> Код Синатры идет.

require 'rubygems'
require 'sinatra'

get '/' do
  html :index
end

def html(view)
  File.read(File.join('public', "#{view.to_s}.html"))
end

public folder == >> содержит все остальное ... css, js, blah blah..etc.

user@user-SVE1411EGXB:~/sintra1$ ls
index.rb  public
user@user-SVE1411EGXB:~/sintra1$ find public/
public/
public/index.html
public/about_us.html
public/contact.html
public/fonts
public/fonts/fontawesome-webfont.svg
public/fonts/fontawesome-webfont.ttf
public/img
public/img/drink_ZIDO.jpg
public/js
public/js/bootstrap.min.js
public/js/jquery.min.js
public/js/bootstrap.js
public/carsoul2.html
public/css
public/css/font-awesome-ie7.css
public/css/bootstrap.min.css
public/css/font-awesome.min.css
public/css/bootstrap.css
public/css/font-awesome.css
public/css/style.css
user@user-SVE1411EGXB:~/sintra1$

Теперь запустите сервер, и вы сможете без проблем перемещаться по статическим страницам.

user@user-SVE1411EGXB:~/sintra1$ ruby index.rb 
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop
2 голосов
/ 29 июня 2014

драгоценный камень sinatra-assetpack предлагает целый ряд возможностей. Синтаксис сладкий:

serve '/js', from: '/app/javascripts'

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

1 голос
/ 27 января 2018

http://sinatrarb.com/configuration.html#static---enabledisable-static-file-routes

Это был бы правильный способ сделать это.

set :public_folder, 'public'

Я использовал статический параметр, потому что он может повлиять на использование public_folder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...