2014-09-24 2 views
1

У меня есть приложение Middleman, которое я обслуживаю, используя Rack::TryStatic.Стойка :: Строитель и стойка :: TryStatic не работает

Адрес config.ru.

use Rack::TryStatic, 
    root: 'build', 
    urls: %w[/], 
    try: ['.html', 'index.html', '/index.html'] 

run lambda{ |env| 
    four_oh_four_page = File.expand_path("../build/404.html", __FILE__) 
    [ 404, { 'Content-Type' => 'text/html'}, [ File.read(four_oh_four_page) ]] 
} 

Я понимаю, что когда вы используете config.ru с run, map или use методов, они преобразуются в Rack::Builder объекта.

Я попробовал оборачивать этот конфиг в Rack::Builder объекте:

app = Rack::Builder.new do 

    use Rack::TryStatic, 
    root: 'build', 
    urls: %w[/], 
    try: ['.html', 'index.html', '/index.html'] 

    run lambda{ |env| 
    four_oh_four_page = File.expand_path("../build/404.html", __FILE__) 
    [ 404, { 'Content-Type' => 'text/html'}, [ File.read(four_oh_four_page) ]] 
    } 
end 

run app 

Когда я делаю это, я получаю 404 страниц для всех запросов.

Почему это не работает?

ответ

3

Похоже, есть ошибка в текущей выпущенной версии TryStatic что has been fixed in master, где try массив теряется при использовании в пути, что приводит к промежуточному повторной инициализации.

Вы можете избежать этого, убедившись, что приложение только получить S инициализируются один раз с помощью to_app:

run app.to_app 

или равноценно использовать app вместо new:

app = Rack::Builder.app do 
    # ... 
+0

Brilliant, спасибо. Я использовал «Rack :: Builder.app», и теперь он работает :) – jordelver

Смежные вопросы