2016-04-05 20 views
0

Wenn ich den Zugriff auf:Sinatra Show ansehen/example /: id gibt 404-Fehler für Vermögenswerte, wenn Zahnräder mit

get "/example/:id" do 
    ... 
    slim :'example/show' 
end 

Ich erhalte diese Fehlermeldung:

"GET /example/assets/app.css HTTP/1.1" 404 
"GET /example/assets/app.js HTTP/1.1" 404 

Ich bin der Verdacht, dass :id kann ein Problem sein hier, weil meine Assets Setup funktioniert, wenn ich zugreife:

get "/example" do 
    ... 
    slim :'example/index' 
end 

Werke:

"GET /assets/app.css HTTP/1.1" 304 
"GET /assets/app.js HTTP/1.1" 200 

Mein Setup für Ritzel:

class App < Sinatra::Base 
    set :environment, Sprockets::Environment.new 

    environment.append_path "assets/stylesheets" 
    environment.append_path "assets/javascripts" 

    environment.js_compressor = :uglify 
    environment.css_compressor = :scss 

    get "/assets/*" do 
    env["PATH_INFO"].sub!("/assets", "") 
    settings.environment.call(env) 
    end 

    ... 

end 

Meine volle Repo aber ohne letzte Änderungen: https://github.com/aneta-bielska/home-for-paws-app

Antwort

1

In Ihrem Layout haben Sie die folgenden Zeilen, die die Links definieren zu Ihrem Vermögen:

link rel="stylesheet" href="assets/app.css" 
script src="assets/app.js" 

Da die URLs in diesen Elementen nicht mit einem Schrägstrich beginnen, behandelt der Browser sie relativ zur Seite, auf der sie angezeigt werden. Das heißt, wenn Sie /example besuchen, gehen die Verbindungen zu /assets/app.cs und /assets/app.js. Wenn Sie jedoch zum Beispiel auf example/1 gehen, werden die Links als relativ zum 1 behandelt, so dass der Browser versucht, /example/assets/app.cs (und ähnlich für app.js) abzurufen.

Sie müssen sicherstellen, dass diese Links immer als absolut behandelt werden. Der einfachste Weg wäre, nur ein / am Anfang hinzufügen:

link rel="stylesheet" href="/assets/app.css" 
script src="/assets/app.js" 

Eine robustere Lösung Sinatra’s url helper sein könnte verwenden Sie immer, um sicherzustellen, die richtigen Links zu erstellen, wie sie es Konto Montag die App auf verschiedene nehmen Pfade auf dem Server:

link rel="stylesheet" href=url("/assets/app.css") 
script src=url("/assets/app.js") 
+0

Sieht aus, als wäre das alles, was ich brauchte. Vielen Dank! –