gpt4 book ai didi

ruby - 直接使用 Rack TryStatic 服务文件?

转载 作者:数据小太阳 更新时间:2023-10-29 07:34:34 25 4
gpt4 key购买 nike

我正在使用 Middleman 创建静态网站。

中间人生成静态 html 文件到 ./build 目录。

这是我目前使用的配置:

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, :root => "build", :urls => %w[/], :try => ['.html']

但它不起作用,因为运行只接受 1 个参数。 Rack::TryStatic 需要 2 个参数,appoptions 来初始化,而我没有任何 app.

我该怎么做?

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

最佳答案

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

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

或等同于:

use Rack::TryStatic, :root => "build", :urls => %w[/], :try => ['.html']
run lambda {|env| [404, {'Content-type' => 'text/plain'}, ['Not found']]}

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

use Rack::TryStatic, :root => "build", :urls => %w[/], :try => ['.html']
run Rack::NotFound.new('path/to/your/404.html')

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

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

尽管这不允许使用相应的 .html 文件来处理“裸”请求——所有请求都需要指定整个文件名。

关于ruby - 直接使用 Rack TryStatic 服务文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com