4

このガイドを使用して静的 Web サイトを Heroku にデプロイしました: https://devcenter.heroku.com/articles/static-sites-ruby

このフォルダー構造を作成しました:

- site
  |- config.ru
  |- Gemfile
  |- public
     |- index.html
     |- images
     |- js
     |- css
     |- subfolder
        |- images
        |- js
        |- css

そしてこれをに書いたconfig.ru

use Rack::Static, 
  :urls => ["/images", "/js", "/css"],
  :root => "public"

use Rack::Static, 
  :urls => ["/images", "/js", "/css"],
  :root => "public/subfolder"  

run lambda { |env|
  [
    200, 
    {
      'Content-Type'  => 'text/html', 
      'Cache-Control' => 'public, max-age=86400' 
    },
    File.open('public/index.html', File::RDONLY)
  ]
}

map '/subfolder' do
  run Proc.new { |env|
    [
      200, 
      {
        'Content-Type'  => 'text/html', 
        'Cache-Control' => 'public, max-age=6400' 
      },
      File.open('public/subfolder/index.html', File::RDONLY)
    ]
  }
end

domain.com今、私は と を指し示したいと思ってpublic/index.htmldomain.com/subfolderますpublic/subfolder/index.html。ランディング ページは適切に機能しているように見えますが、正しいディレクトリ (つまり、正しいimages,jsおよびcssフォルダー) に要求を処理できないようです。

これを解決する方法はありますか?ありがとう!

4

1 に答える 1

1

問題は、ルーティングを不一致で使用していることだと思います:

use Rack::Static, 
  :urls => ["/images", "/js", "/css"],
  :root => "public"

上記は、たとえばフォルダー/js/jquery-min.jsから提供する必要があります。public

use Rack::Static, 
  :urls => ["/images", "/js", "/css"],
  :root => "public/subfolder"  

public/subfolderこれで同じように使用しようとすると、/js/jquery-min.jsから提供されるようになるはずpublic/subfolder/js/jquery-min.jsです。これは矛盾しています。

代わりに、次のことを試してください。

use Rack::Static, root: 'public',
  urls: %w( /images /js /css /subfolder )

そして/js/*、ベースディレクトリ/subfolder/js/*が必要な場合、サブフォルダーが必要な場合、またはjs/*HTML ページの同じディレクトリレベルのスクリプトを取得したい場合に、アセットにルーティングします。

それで直るかどうか教えてください!

于 2013-03-03T19:23:50.037 に答える