Rack :: Builder和Rack :: TryStatic不起作用

时间:2014-09-24 09:50:36

标签: ruby rack middleman

我有一个Middleman应用,我使用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页面。

为什么这不起作用?

1 个答案:

答案 0 :(得分:3)

当前发布的TryStatic版本has been fixed in master似乎存在一个错误,try数组在使用时导致中间件重新初始化时丢失

您可以通过使用to_app确保应用仅初始化一次来避免这种情况:

run app.to_app

或等效使用app代替new

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