12

私のサイトはこちらです。

以前は Django を利用したブログでした。しかし、私はそれを更新しなくなったので、静的な HTML サイトにしたかっただけです。私はそれをwget'edして、Ruby RackでHerokuに移動しました。

ただし、すべての URL はホームページに解決されます。これは、config.ru ファイルが原因です。

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

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

質問:複数の URL をマップする方法はありますか? 例:へのfoo.com/aboutマップ、へpublic/about/index.htmlfoo.com/posts/2012/oct/21/blog-postマップpublic/posts/2012/oct/21/blog-post/index.html

この時点で、それぞれを手で入力しても問題ありません。

ご協力いただきありがとうございます。

4

2 に答える 2

19

今のところ、最良の答えは次のとおりです。

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

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

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

そして、すべての URL をそれぞれのファイルにマップします。面倒ですが、うまくいきます。URL 変数に関するこの質問への回答も参照してください。しかし、私のためにそれを機能させることができませんでした。

于 2012-11-05T08:34:39.960 に答える
7

なぜrun声明が必要なのですか?多分これはあなたのために働く:

use Rack::Static, 
  :urls => ["/media/images", "/media/js", "/media/css"],
  :root => "public",
  :index => "index.html",
  :header_rules => [
    [:all, {'Cache-Control' => 'public, max-age=86400'}]
  ]

run lambda{ |env| [ 404, { 'Content-Type'  => 'text/html' }, ['404 - page not found'] ] }
于 2012-11-03T17:00:28.573 に答える