gpt4 book ai didi

haskell - 使用 Haskell Snap 扩展命令行选项

转载 作者:行者123 更新时间:2023-12-02 01:53:19 25 4
gpt4 key购买 nike

我有一个 acid-state 后端来补充我的 snap 网站。它在自己的进程中运行,我的 snap web 服务器需要一个 IP 地址才能连接到它。出于调试和部署目的,我希望能够在运行已编译的 snap 应用程序时将 IP 地址作为命令行参数传入。这个 IP 地址可以在调用酸性状态处理程序的 SnapletInit monad 中访问。

我如何在 Snap 中扩展命令行参数系统来解决这个问题?

理想情况下,我想要类似的东西。

./app -ip 192.168.0.2 -p 8080 -e prod +RTS -I0 -A4M -qg1

然后像这样应用它。

app :: SnapletInit App App
app = makeSnaplet "app" "Snapplication" Nothing $ do
ip <- getConfig "ip"
d <- nestSnaplet "acid" acid $ acidInitRemote ip
return $ App d

最佳答案

我建议更改 Acid State snaplet 以从配置而不是命令行读取它的 IP。 Snap 中的配置已设置为加载您在命令行上作为 -e 参数传递的任何内容。例如,以 -e prod 开头将加载 snaplet/acidstate/prod.conf,以无 -e-e 开头devel 将加载 snaplet/acidstate/devel.conf。这有助于将所有环境设置放在一起,而不是允许任何可能的命令行标志组合。

这是 an example来 self 的一个快照:

initStripe :: SnapletInit b StripeState
initStripe = makeSnaplet "stripe" "Stripe credit card payment" Nothing $ do
config <- getSnapletUserConfig

(stripeState, errors) <- runWriterT $ do
secretKey <- logErr "Must specify Strip secret key" $ C.lookup config "secret_key"
publicKey <- logErr "Must specify Strip public key" $ C.lookup config "public_key"
clientId <- logErr "Must specify Strip client ID" $ C.lookup config "client_id"
version <- Just . maybe V20110915d OtherVersion <$> liftIO (C.lookup config "version")
let caFilePath = Just "" -- This is unused by Stripe but vestigial in the Haskell library.

return $ StripeState <$> (StripeConfig <$> (SecretKey <$> secretKey) <*> caFilePath <*> version) <*> (PublicKey <$> publicKey) <*> clientId
return $ fromMaybe (error $ intercalate "\n" errors) stripeState

关于haskell - 使用 Haskell Snap 扩展命令行选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591085/

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