Serving statische Dateien mit Sinatra

133

Ich habe eine Seite Website nur mit HTML, CSS und JavaScript. Ich möchte die App auf Heroku bereitstellen, aber ich finde keinen Weg, dies zu tun. Ich versuche jetzt, die App mit Sinatra arbeiten zu lassen.

%Vor%

Und das Folgende ist der Inhalt von myapp.rb .

%Vor%     
TK. 13.03.2010, 05:38
quelle

13 Antworten

121

Ohne zusätzliche Konfiguration wird Sinatra Vermögenswerte in public bereitstellen. Für die leere Route sollten Sie das Indexdokument rendern.

%Vor%

Routen sollten einen String zurückgeben, der zum HTTP-Antworttext wird. File.read öffnet eine Datei, liest die Datei, schließt die Datei und gibt String zurück.

    
Tate Johnson 13.03.2010, 13:34
quelle
160

Sie können den Helfer send_file verwenden, um Dateien zu senden.

%Vor%

Dies liefert index.html von jedem Verzeichnis, das mit den statischen Dateien Ihrer Anwendung konfiguriert wurde.

    
Ryan Ahearn 05.08.2011 13:45
quelle
58

Sie können sie einfach aus dem öffentlichen Ordner hosten und benötigen keine Routen.

%Vor%

In der myapp.rb

%Vor%

Link zu einem Unterordner in der Öffentlichkeit

%Vor%

Alles in ./public ist von '/whatever/bla.html

aus zugänglich

Beispiel:
./public/stylesheets/screen.css
Wird über '/stylesheets/screen.css' erreichbar sein, keine Route erforderlich

    
Morgan 11.04.2012 10:44
quelle
11

Beachten Sie, dass Sie in der Produktion Ihren Webserver index.html automatisch senden lassen können, damit die Anfrage nie an Sinatra geht. Das ist besser für die Leistung, da Sie nicht nur den Sinatra / Rack-Stack durchlaufen müssen, um statischen Text zu liefern, was Apache / Nginx großartig macht.

    
Rob Cameron 11.02.2011 17:52
quelle
10

In Sinatra sollten Sie statische Dateien aus dem öffentlichen Verzeichnis bereitstellen, wie in den Dokumenten erläutert:

  

Statische Dateien

     

Statische Dateien werden aus dem Verzeichnis ./public geliefert. Sie können einen anderen Speicherort angeben, indem Sie die Option public festlegen:

     

Beachten Sie, dass der Name des öffentlichen Verzeichnisses nicht in der URL enthalten ist. Eine Datei ./public/css/style.css wird als example.com/css/style.css zur Verfügung gestellt.

    
quelle
2

Das Paket sinatra-assetpack bietet eine ganze Reihe von Features. Syntax ist süß:

%Vor%

Während ich immer noch Probleme mit der Rails-Assets-Pipeline habe, habe ich das Gefühl, dass ich mit sinatra-assetpack viel mehr Kontrolle habe - aber meistens funktioniert es nur mit ein paar Zeilen Code.

    
jitter 29.06.2014 16:29
quelle
2

AKTUALISIERTE ANTWORT : Ich habe alles oben gebunden ohne Glück, dass ich css laden könnte, js .... etc Inhalt das einzige was geladen wurde ist index.html ... und der Rest ging = & gt; & gt; 404 error

Meine Lösung: App-Ordner sieht so aus.

index.rb == & gt; & gt; Sinatra-Code geht.

%Vor%

public folder == & gt; & gt; enthält alles andere ... css, js, blah blah..etc.

%Vor%

Starten Sie jetzt den Server und Sie können problemlos durch statische Seiten navigieren.

%Vor%     
zee 27.01.2015 22:10
quelle
2

Fügen Sie unterhalb der Zeile in der Haupt-rb-Datei

hinzu %Vor%     
Muhammad Aamir Talib 07.05.2015 15:18
quelle
2
%Vor%     
Evan Ross 29.07.2015 08:42
quelle
1

Sie könnten die Datei index.html in views/index.erb verschieben und einen Endpunkt wie folgt definieren:

%Vor%     
bonh 24.10.2014 13:30
quelle
0

Das Einfügen von Dateien in den Ordner public hat eine Einschränkung. Wenn Sie sich im Root-Verzeichnis befinden, funktioniert '/' path korrekt, da der Browser den relativen Pfad Ihrer CSS-Datei zum Beispiel /css/style.css und sinatra die Datei im Verzeichnis public sucht. Wenn Ihr Standort jedoch beispielsweise /user/create ist, sucht der Webbrowser nach Ihrer CSS-Datei in /user/create/css/style.css und schlägt fehl.

Als Workaround habe ich die folgende Umleitung hinzugefügt, um die CSS-Datei korrekt zu laden:

%Vor%     
Charmi 19.01.2015 06:39
quelle
0

Ссылка

Dies wäre der richtige Weg, dies zu tun.

%Vor%

Ich habe die statische Einstellung verwendet, da die Einstellung die Verwendung von public_folder beeinflussen kann.

    
Hayden 26.01.2018 21:55
quelle
-7

Was ist mit dieser Lösung? :

%Vor%

Wenn Sie also zum Beispiel zu / Unterverzeichnis / test / navigieren, wird das Unterverzeichnis / test / index.html

geladen     
heldopslippers 12.04.2010 11:57
quelle

Tags und Links