2014-09-24 36 views
1

我有一個Middleman應用程序,我使用的是Rack::TryStaticRack :: Builder和Rack :: 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.rurunmapuse 方法,它們將轉換爲一個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陣列在以使得中間件被重新初始化的方式使用時丟失。

您可以通過確保應用程序只得到初始化■避免這個曾經利用to_app

run app.to_app 

或等效採用app,而不是new

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

輝煌,謝謝大家。我使用了'Rack :: Builder.app',它現在可以工作:) – jordelver 2014-09-24 11:56:07