Как настроить 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
В этот момент я даже прекрасно набрал каждый из них вручную.
Спасибо за вашу помощь.
Ответы
Ответ 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'] ] }