2016-04-05 3 views
0

を使用した場合、IDは、資産の404エラーを返します:シナトラビューの表示/例/:私がアクセスしていますがときにスプロケット

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

私は:私はこのエラーを取得しています

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

の場合、 私の資産の設定が機能するので、 :idが問題になると思われます。点の

作品:スプロケットのための

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

マイセットアップ:

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 

私の完全なレポが、最後の変更なし:あなたのレイアウトではhttps://github.com/aneta-bielska/home-for-paws-app

答えて

1

あなたはリンクを定義以下の行を持っていますあなたの資産に:

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

これらの要素のURLはスラッシュで始まらないため、ブラウザは表示されたページに相対的なものとして扱います。つまり、/exampleにアクセスすると、/assets/app.cs/assets/app.jsにリンクします。しかし、例えばexample/1に行くと、リンクは1に関連するものとして扱われるので、ブラウザは/example/assets/app.cs(そして同様に)を取得しようとします。

これらのリンクが常に絶対として扱われるようにする必要があります。それはそれは違うでアプリを取り付けアカウント取るよう、より堅牢なソリューションは、あなたが常に正しいリンクを作成確保するためにSinatra’s url helperを使用するのが良いかもしれない

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

:最も簡単な方法は、ちょうど開始時に/を追加することですサーバーのパス:

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

これは私が必要としていたようです。ありがとうございました! –

関連する問題