我有一个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.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页面。
为什么这不起作用?
答案 0 :(得分:3)
当前发布的TryStatic
版本has been fixed in master似乎存在一个错误,try
数组在使用时导致中间件重新初始化时丢失
您可以通过使用to_app
确保应用仅初始化一次来避免这种情况:
run app.to_app
或等效使用app
代替new
:
app = Rack::Builder.app do
# ...