【发布时间】:2021-01-07 21:27:56
【问题描述】:
我正在尝试将 yesod 应用程序作为 CGI(或 FastCGI)程序提供,但 Apache 向我显示 500 错误:
[2020 年 9 月 21 日星期一 17:35:41.425565] [http:error] [pid 2758] [client 10.0.2.2:43872] AH02429:响应标头名称“21/Sep/2020”包含无效字符,正在中止请求
从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 配置,以便服务器可以运行应用程序。它没有说明我认为问题所在的应用程序代码的 nedded 更改。
我也检查了这个stackoverflow question,但它是近 8 年前的,所以现在已经过时了。
【问题讨论】:
-
是的,我已经研究过了,但我找不到任何有用的东西,除了 Apache 配置,除了重写规则之外,它和我的一样。
-
这似乎不是管理程序重启的问题,因为错误是关于响应头和它的第一次执行。
标签: apache haskell cgi yesod haskell-wai