加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 直接使用Rack TryStatic提供文件?

发布时间:2020-12-17 02:18:35 所属栏目:百科 来源:网络整理
导读:我正在使用Middleman创建一个静态站点. Middleman在./build目录中生成静态html文件. 这是我目前正在使用的配置: require 'rubygems'require 'middleman'require 'rack/contrib/try_static'use Rack::TryStatic,:root = "build",:urls = %w[/],:try = ['.htm
我正在使用Middleman创建一个静态站点.

Middleman在./build目录中生成静态html文件.

这是我目前正在使用的配置:

require 'rubygems'
require 'middleman'
require 'rack/contrib/try_static'

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

run Middleman::Application.server

所以Middleman正在提供静态文件.如何让Rack :: TryStatic直接处理请求?

我试着让它成为像

run Rack::TryStatic,:try => ['.html']

但它不起作用运行只接受1个参数.而Rack :: TryStatic需要2个参数,app和options来初始化,我没有任何应用程序.

我怎样才能做到这一点?

(如果重要的话,我正在部署到Heroku)

解决方法

正如您所注意到的,Rack :: TryStatic等Rack中间件组件需要另一个应用程序来传递请求.您可以创建一个简单的用户,例如刚刚返回404响应,例如:

app = lambda {|env| [404,{'Content-type' => 'text/plain'},['Not found']
run Rack::TryStatic.new app,:try => ['.html']

或等效地:

use Rack::TryStatic,:try => ['.html']
run lambda {|env| [404,['Not found']]}

如果您有自己的404文件,则可以使用rack-contrib的Rack::NotFound而不是自己的自定义端点:

use Rack::TryStatic,:try => ['.html']
run Rack::NotFound.new('path/to/your/404.html')

如果你没有使用:try数组文件扩展名来尝试和服务,你可以直接使用Rack::File.在内部,Rack :: TryStatic使用Rack::Static,而后者又使用Rack :: File.与TryStatic和Static不同,Rack :: File本身就是一个Rack应用程序,因此不需要单独的应用程序来传递请求.您的config.ru将简单地是:

run Rack::File.new './build'

虽然这不允许“裸”请求与相应的.html文件一起提供 – 所有请求都需要指定整个文件名.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读