Obsługa plików statycznych za pomocą Sinatry
Mam jedną stronę internetową tylko za pomocą HTML, CSS i JavaScript. Chcę wdrożyć aplikację do Heroku, ale nie mogę znaleźć sposobu, aby to zrobić. Teraz staram się, aby aplikacja działała z Sinatra.
.
|-- application.css
|-- application.js
|-- index.html
|-- jquery.js
`-- myapp.rb
I poniżej znajduje się treść myapp.rb
.
require 'rubygems'
require 'sinatra'
get "/" do
# What should I write here to point to the `index.html`
end
14 answers
Bez dodatkowej konfiguracji, Sinatra będzie obsługiwać zasoby w public
. Dla pustej trasy chcesz renderować dokument indeksu.
require 'rubygems'
require 'sinatra'
get '/' do
File.read(File.join('public', 'index.html'))
end
Routes powinien zwracać String
, które stają się ciałem odpowiedzi HTTP. File.read
otwiera plik, odczytuje plik, zamyka plik i zwraca String
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-13 13:34:20
Możesz użyć helpera send_file
do serwowania plików.
require 'sinatra'
get '/' do
send_file File.join(settings.public_folder, 'index.html')
end
To będzie służyć index.html
z dowolnego katalogu, który został skonfigurowany jako pliki statyczne aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-20 05:39:33
Możesz po prostu hostować je z folderu publicznego i nie potrzebują tras.
.
-- myapp.rb
`-- public
|-- application.css
|-- application.js
|-- index.html
`-- jquery.js
W myapp.rb
set :public_folder, 'public'
get "/" do
redirect '/index.html'
end
Link do jakiegoś podkatalogu publicznego
set :public_folder, 'public'
get "/" do
redirect '/subfolder/index.html'
end
Wszystko w środku ./ public is accessible from ' / whatever / bla.html
Przykład:
./ public / stylesheets / screen.css
Będzie dostępny poprzez ' / stylesheets / screen.css ' no route required
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-28 16:10:28
Pamiętaj, że w produkcji możesz zlecić serwerowi www wysłanie index.html
automatycznie, aby żądanie nigdy nie dotarło do Sinatry. Jest to lepsze dla wydajności, ponieważ nie musisz przechodzić przez stos Sinatra/Rack tylko po to, aby serwować statyczny tekst, co Apache / Nginx są niesamowite w robieniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-11 17:52:37
Sinatra powinien pozwolić na serwowanie plików statycznych z katalogu publicznego Jak wyjaśniono w docs:
Pliki Statyczne
Pliki statyczne są serwowane z/ public directory. Możesz określić inną lokalizację, ustawiając opcję: public:
Zwróć uwagę, że nazwa katalogu publicznego nie jest uwzględniona w adresie URL. Plik ./ public / css / style.css jest udostępniony jako example.com/css/style.css.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-09 16:02:05
The sinatra-assetpack gem oferuje całą masę funkcji. składnia jest słodka:
serve '/js', from: '/app/javascripts'
Podczas gdy wciąż mam problemy z rails assets pipeline, czuję, że mam znacznie większą kontrolę przy użyciu sinatra-assetpack - ale najczęściej działa to tylko z kilkoma linijkami kodu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-29 16:29:13
ZAKTUALIZOWANA ODPOWIEDŹ :
Związałem wszystkie powyższe bez szczęścia, że mogę załadować css, js....etc contents jedyną rzeczą, która się ładowała, jest indeks.html... a reszta szła =>> 404 error
Moje rozwiązanie: folder aplikacji wygląda tak .
index.rb
==>> Kod Sinatry idzie .
require 'rubygems'
require 'sinatra'
get '/' do
html :index
end
def html(view)
File.read(File.join('public', "#{view.to_s}.html"))
end
public folder
==>> zawiera wszystko inne ...css, js, bla bla..itd.
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$
Teraz uruchom serwer i będziesz mógł poruszać się po statycznych stronach bez problem.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-27 22:10:44
Dodaj poniższy wiersz w głównym pliku rb
set :public_folder, 'public'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 15:18:44
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 08:42:25
Możesz rozważyć przeniesienie pliku index.html
do views/index.erb
i zdefiniowanie punktu końcowego, takiego jak:
get '/' do
erb :index
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 13:30:02
Umieszczanie plików w folderze public
ma ograniczenie. W rzeczywistości, gdy jesteś w katalogu głównym '/'
ścieżka działa poprawnie, ponieważ przeglądarka ustawi względną ścieżkę pliku css na przykład /css/style.css
, a sinatra będzie szukał pliku w katalogu public
. Jeśli jednak Twoja lokalizacja jest na przykład /user/create
, to przeglądarka internetowa będzie szukać Twojego pliku css w /user/create/css/style.css
i nie powiedzie się.
Jako obejście dodałem następujące przekierowanie do poprawnie załadowanego pliku css:
get %r{.*/css/style.css} do
redirect('css/style.css')
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-19 06:39:26
Http://sinatrarb.com/configuration.html#static---enabledisable-static-file-routes
To byłby właściwy sposób.set :public_folder, 'public'
Użyłem ustawienia statycznego, ponieważ to ustawienie może mieć wpływ na użycie public_folder.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 21:55:05
Zawsze możesz użyć Rack:: Static
Https://www.rubydoc.info/gems/rack/Rack/Static
Wystarczy dodać tę linię przed poleceniem' run 'do ' config.ru"
use Rack::Static, :urls => [""], :root => 'public', :index => 'index.html'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-26 06:52:46
Co z tym rozwiązaniem? :
get "/subdirectory/:file" do
file = params[:file] + "index.html"
if File.exists?(params[:file])
return File.open("subdirectory/" + file)
else
return "error"
end
end
Więc jeśli teraz przejść do (na przykład) /podkatalog / test / to załaduje podkatalog / test / index.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-12 11:57:31