我有一个中间人应用程序,我正在使用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页。
为什么这个不行?
发布于 2014-09-24 11:44:07
看起来在当前发布的TryStatic版本中有一个bug,即已经固定在师父身上了,其中try数组在以导致中间件重新初始化的方式使用时丢失。
您可以避免这种情况,方法是确保应用程序只使用to_app初始化一次。
run app.to_app或者等效地使用app而不是new
app = Rack::Builder.app do
# ...https://stackoverflow.com/questions/26013789
复制相似问题