現在、アプリは 2 つの異なる方法でリクエストに応答しています。で始まるリクエスト/images
は、フォルダーを検索して/public/images
、リクエストに一致するファイルを返すことによって処理されます。その他のリクエストは、lambda
ブロックを実行することで処理さindex.html
れ、コンテンツ タイプが .xml のファイルが返されますtext/html
。
これは他のすべてのリクエストに適用されるため、ページが css ファイルを参照し、ブラウザーがそれを取得しようとすると、アプリはindex.html
HTML コンテンツ タイプのページを返すため、MIME タイプに関する警告が表示されます。
これを修正する 1 つの方法は、ミドルウェアが処理/css
する URL のリストに追加することです。Static
use Rack::Static,
:urls => ["/images", "/css"],
:root => "public"
CSSファイルをpublic/css
ディレクトリに配置します(私が書いているように、すでにこれを行っているようです)。
これで差し迫った問題は解決しますが、たとえば最上位ディレクトリに複数の HTML ページを配置したい場合などに問題が発生する可能性があります。
パスのない任意のリクエストに対応する静的サイトを実現する別のソリューションindex.html
(ここで実行しようとしているように見えます) は、rack-rewrite
gem とRack::File
アプリケーションを使用することです。gem 'rack-rewrite'
Gemfile に追加してから、次のconfig.ru
ように使用します。
require 'rack/rewrite'
use Rack::Rewrite do
rewrite "/", "/index.html"
end
run Rack::File.new("public")
これは、一致するファイル (存在する場合) を持つすべてのリクエストに応答し 、パスなしで到着したリクエストはindex.html
. index.html
(メイン ディレクトリの下のサブディレクトリに対する要求には対応しないことに注意してください)。
Heroku の Cedar スタックを使用している場合は、Apache で「本物の」静的ホスティングを取得するために、php アプリを偽造することも検討できます。
ブラウザでファイルを直接開いているだけでない限り、これがローカルでは機能するのにHerokuでは機能しない理由はわかりません。サーバーをローカルで (たとえば でrackup
) 実行していますか、それともファイルを直接見ていますか?