如何根据环境(生产与开发)更改Snap应用程序的行为?

西曼侬

Snap中未捕获的运行时异常的默认行为是显示包含错误的白页。这对于开发模式非常有用,但对于生产来说确实很糟糕。

我的应用程序设置可以捕获异常并记录错误,以便在发生不良情况时显示出对用户更具吸引力的内容。如何更改它,使其仅在生产模式下才会发生?

app :: SnapletInit App App
app = makeSnaplet "app" "An snaplet example application." Nothing $ do
    h <- nestSnaplet "" heist $ heistInit "templates"
    s <- nestSnaplet "sess" sess $
                 initCookieSessionManager "site_key.txt" "sess" (Just 86400)

    d <- nestSnaplet "db" db pgsInit

    addRoutes routes

    wrapSite (<|> notFound)
    -- TODO: figure out how make this only catch errors when in production mode
    wrapSite internalServerError

    initFlashNotice h sess
    addConfig h $ mempty & scInterpretedSplices .~ userSessionSplices sess
    return $ App h s d

internalServerError :: AppHandler () -> AppHandler ()
internalServerError h =
    catch h (\ (e :: SomeException) -> do
        logError $ B.pack $ show e
        modifyResponse (setResponseCode 500)
        render "errors/500")
强大字节

Snap为此提供了getEnvironment函数。此函数获取传递给runSnaplet的环境环境默认为“ devel”,但可以在运行时使用-e命令行选项进行更改。如果您像这样运行您的应用程序:

dist/build/myapp/myapp -e prod

然后getEnvironment将返回“ prod”。您可以这样使用:

notFound = do
  e <- getEnvironment
  case e of
    "devel" -> develErrorPage
    _       -> productionErrorPage

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据环境配置Express js应用程序?喜欢开发,登台和生产?

如何在运行时检查我的Rails应用程序是否在开发环境或生产环境中运行

如何在生产环境中更改 Flutter 应用程序中的数据模型?

根据整个 URL 更改应用程序行为

如何根据环境更改Meanapp或Nodejs应用程序中的基本URL?

Rails应用程序如何设置环境(开发,暂存等)?

如何从NaCl开发环境应用程序中打开文件?

如何在生产和开发环境中一致地获取ASP.NET 5 DNX项目的应用程序基本路径?

FastAPI如何根据开发或生产设置环境变量?

如何更改“菜单”按钮行为以不终止应用程序

如何永久更改应用程序标记的行为?

有没有办法判断Ember.js应用程序在哪个环境(开发/生产)中运行?

为Google Cloud Run应用程序设置多个环境(例如开发,阶段和生产)的理想方法是什么?

如何将我的 Symfony 4 应用程序从开发模式转换为生产模式?

开发基于Java EE的Web应用程序时如何提高生产力

如何在反应应用程序中放置图像文件夹以进行生产/开发

如何检查Angular应用程序是否在生产或开发模式下运行

如何配置Angular应用程序以将CLI用于生产,将JIT用于开发?

Azure功能:如何控制开发/生产/登台应用程序设置?

如何判断您的应用程序是否正在使用iCloud架构开发或生产

如何配置 rails 应用程序,以便本地开发和生产部署都可以工作

如何将在Hyperledger Composer上开发的应用程序投入生产?

如何在React应用程序中设置生产环境变量?(托管在Netlify上)

如何在直播生产环境中停止 Flink 应用程序而不丢失流数据

将Phundament Web应用程序移至生产环境

如何根据键盘的语言更改应用程序的语言?

如何根据开发或生产模式更改 CSS 模块输出?

使用新的支持库根据语言环境更改应用程序语言

如何在Android应用程序中设置测试标志,以区分在测试环境和生产环境中运行该应用程序?