Подтвердить что ты не робот

Как настроить URL-адреса для статического сайта с помощью Ruby Rack на Heroku

Мой сайт здесь.

Раньше это был блог с Django. Однако я больше не обновляю его, поэтому просто хочу сделать его статическим HTML-сайтом. Я запустил его и перевел в Хероку с помощью Ruby Rack.

Однако каждый 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.html, foo.com/posts/2012/oct/21/blog-post отображается на public/posts/2012/oct/21/blog-post/index.html

В этот момент я даже прекрасно набрал каждый из них вручную.

Спасибо за вашу помощь.

4b9b3361

Ответ 1

На данный момент я нашел лучший ответ:

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. Не мог заставить его работать для меня, хотя.

Ответ 2

Зачем вам нужен оператор 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'] ] }