gpt4 book ai didi

apache - 将 yesod 应用程序作为(快速)CGI 服务

转载 作者:行者123 更新时间:2023-12-04 08:52:59 25 4
gpt4 key购买 nike

我正在尝试将 yesod 应用程序作为 CGI(或 FastCGI)程序提供服务,但 Apache 向我显示 500 错误:

[Mon Sep 21 17:35:41.425565 2020] [http:error] [pid 2758] [client 10.0.2.2:43872] AH02429: Response header name '21/Sep/2020' contains invalid characters, aborting request

从一个带有stack new project yesodweb/sqlite 的新模板开始,我尝试通过更改src/Application.hs 将其转换为CGI 程序。

我已经导入了 Wai CGI 库

import Network.Wai.Handler.CGI              (run)

并将appMain的最后一行更改为run app:

-- | The @main@ function for an executable running this site.
appMain :: IO ()
appMain = do
-- Get the settings from all relevant sources
settings <- loadYamlSettingsArgs
-- fall back to compile-time values, set to [] to require values at runtime
[configSettingsYmlValue]

-- allow environment variables to override
useEnv

-- Generate the foundation from the settings
foundation <- makeFoundation settings

-- Generate a WAI Application from the foundation
app <- makeApplication foundation

-- Run the application with Warp
--runSettings (warpSettings foundation) app
run app

我认为这是将其用作 CGI 程序的最小更改,但显然不起作用。

我已经看过 yesod 的书 chapter on deploying your Webapp这有助于编写适当的 Apache 配置,以便服务器可以运行该应用程序。它没有说明我认为是问题所在的应用程序代码的必要更改。

我也检查过这个 stackoverflow question但它是将近 8 年前的,所以现在已经过时了。

最佳答案

问题是默认的 makeFoundation 记录到标准输出,这也是 CGI 程序应该发送其响应的地方,所以你会得到响应 header 与日志输出的混合,并且Apache 尝试将日志行解析为 HTTP header 等。

如果将 newStdoutLoggerSet 替换为 newStderrLoggerSet,它应该可以工作,并且日志输出将以 Apache 的“error.log”或等效文件结束。

关于apache - 将 yesod 应用程序作为(快速)CGI 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63998131/

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