标签: yesod

如何在WAI服务器中实现shutdown命令?

我想为我的webapp实现'graceful shutdown'命令(而不是我的第一直觉,就是要求人们杀死进程)

我的前两次尝试包括

  1. liftIO exitSuccess
  2. E.yield (responseLBS statusOK [G.contentType "text/plain"] "") E.EOF

两者都只是愉快地将结果返回给客户端并继续收听.应用程序可以做什么来杀死服务器?这甚至是一件合理的事情吗?

我承认我对iteratee没有很强的理解,只知道我可以消耗我的输入并且Iteratee是一个MonadIO实例.

haskell yesod

18
推荐指数
1
解决办法
1160
查看次数

在Yesod和Keter传递应用秘密

我正在使用Yesod构建一个Web应用程序,目前我正在通过环境变量(根据Twelve-Factor App)传递API密钥等秘密,以避免将这些值存储在版本控制的配置文件中.例如,我在开发模式下运行我的应用程序,如下所示:

SOME_API_KEY=value yesod devel
Run Code Online (Sandbox Code Playgroud)

我的config/settings.yml文件中有一个值,该值是根据此环境变量定义的,其值为空值,如下所示:

meetup-api-key: "_env:SOME_API_KEY:"
Run Code Online (Sandbox Code Playgroud)

要使用Keter进行部署,我将使用该yesod keter命令构建Keter包,并将生成的文件放入Keter的incoming目录中.由于我使用环境变量配置,我的应用程序的.keter文件不包含SOME_API_KEY值(这是故意的).

我应该如何SOME_API_KEY进入在Keter内部运行的应用程序实例?

我想避免将价值烘焙到我keter-config.yaml的至少以下三个原因:

  1. 它不如环境变量方法安全.
  2. 直接嵌入到Keter本身的配置文件中,与应用程序的配置相反,如果不停止并重新启动整个Keter进程,则无法更改密钥.
  3. 环境变量将传递到Keter管理的每个应用程序中.

我希望在这种情况下有一些"最佳实践".

deployment haskell web-deployment yesod keter

17
推荐指数
1
解决办法
353
查看次数

yesod持久postgresql复杂记录

我使用persistent来保存以下记录(时间是UTCTime).

type Price = Int
type Volume = Int

share [mkPersist sqlSettings, mkMigrate "migrateBook"] 
  [persistLowerCase|
    Level
      limit     Price
      volumes   [Volume]
      deriving Show Read Eq

    Book
      time      Time
      asks      [Level]
      bids      [Level]
      deriving Show Read Eq
  |]
Run Code Online (Sandbox Code Playgroud)

当我迁移结构时,我得到一个Book表:

CREATE TABLE book
(
 id serial NOT NULL,
 "time" timestamp without time zone NOT NULL,
 asks character varying NOT NULL,
 bids character varying NOT NULL,
 CONSTRAINT book_pkey PRIMARY KEY (id )
 )
Run Code Online (Sandbox Code Playgroud)

和一个表级别:

 CREATE TABLE level
 (
   id serial NOT NULL,
   "limit" double …
Run Code Online (Sandbox Code Playgroud)

database orm haskell persistent yesod

16
推荐指数
1
解决办法
731
查看次数

如何在Haskell中实现HATEOAS?

我有一些旧的代码,它在Web API上公开服务,它基本上用于HTTP动词.我想将此项目移至使用超媒体控件(HATEOAS).我想知道是否有任何库已经支持根据HAL或JSON-LD规范在子资源的资源表示中嵌入链接.我用Google搜索了但我找不到任何东西.很高兴知道Yesod,Snap或Happstack等成熟项目是否计划支持此功能?

编辑:为了澄清,我对REST成熟度模型的第3级感兴趣

rest haskell hateoas happstack yesod

16
推荐指数
1
解决办法
683
查看次数

在Yesod中允许跨源请求

我的应用程序使用bookmarklet,我需要允许CORS,MyRouteR因此我的bookmarklet代码可以使用此路由进行AJAX请求.

在我的配置/路由初稿中,我MyRouteR只支持一种请求方法PUT.但事实证明,我还需要支持OPTIONS方法,这些浏览器用于CORS预检请求.

我在config/routes中得到了以下结果:

/myroute MyRouteR PUT OPTIONS
Run Code Online (Sandbox Code Playgroud)

我有点希望在模板Haskell中有一些相关的机制来处理配置/路由,这样在这个路由的方法列表中添加OPTIONS会自动导致CORS支持,但没有骰子.不是世界末日,但它会有意义并且感觉优雅.

为了使CORS工作,我给路由一个OPTIONS处理程序:

optionsMyRouteR :: Handler RepPlain
optionsMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    addHeader "Access-Control-Allow-Methods" "PUT, OPTIONS"
    return $ RepPlain $ toContent ("" :: Text)

putMyRouteR :: Handler RepJson
putMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    -- more stuff ...
Run Code Online (Sandbox Code Playgroud)

这是有效的,但感觉有点不太正常,因为它是如此的样板.那么,有两个问题:

  1. 我们有比Yesodic更好的形容词吗?
  2. 还有另一种更好的方法让路由支持跨源请求吗?

ajax haskell bookmarklet cors yesod

15
推荐指数
1
解决办法
1213
查看次数

如何使用Yesod构建AngularJS应用程序

我设法使用Yesod成功编写了一个小应用程序.现在我处于我希望为其添加更好的交互的阶段,我想使用AngularJS来做到这一点.

据我所知,Yesod对AngularJS的支持仍然是实验性的.而且,到目前为止我找到的文档对我来说是无法访问的.我没有掌握所有的Yesod概念.

所以我想知道,有哪些方法可以集成AngularJS和Yesod框架.我在想的是:

  1. 在AngularJS中编写前端.
  2. 使用Yesod开发Web服务.
  3. 通过GET和POST http请求连接前端和Web服务.可以通过输入表单(以这种方式利用一些Yesod功能)将信息发送到服务器,并且可以通过JSON对象将信息发送到前端.

理想情况下,我想在Haskell中编写所有内容,但在目前的情况下可能不可能.因此,我想问一下,我想到的替代方案是否是一个好方法,以及是否有办法改进它.

谢谢.

javascript json haskell yesod angularjs

14
推荐指数
1
解决办法
874
查看次数

yesod - 获取POST的请求体"Content-type:application/json"

使用yesod 0.8.0,我试图从这个示例请求中检索帖子消息的正文:

curl -v -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"name":"oscar"}'    http://localhost:3000/user/xyz
Run Code Online (Sandbox Code Playgroud)

在我的处理程序中,我看到它的唯一方法是使用

(pp, files) <- runRequestBody
Run Code Online (Sandbox Code Playgroud)

但由于内容类型的原因,这会失败.还有其他功能吗?

haskell yesod

13
推荐指数
2
解决办法
2812
查看次数

我不明白yesod中这类家庭的东西是什么

我浏览了yesod书和来源,并了解了一切如何运作.但在我写自己的东西之前,脚手架网站中有一件事我不明白.

所以我在一个网站"copywww"上加工,在文件CopyWWWState.hs中有代码:

instance YesodPersist CopyWWWState where
    type YesodDB CopyWWWState = SqlPersist
    runDB db = liftIOHandler
             $ fmap connPool getYesod >>= Settings.runConnectionPool db

instance YesodAuth CopyWWWState where
    type AuthId CopyWWWState = UserId

    -- Where to send a user after successful login
    loginDest _ = RootR
    -- Where to send a user after logout
    logoutDest _ = RootR

    getAuthId creds = runDB $ do
        x <- getBy $ UniqueUser $ credsIdent creds
        case x of
            Just (uid, _) -> return $ Just …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

13
推荐指数
1
解决办法
743
查看次数

cabal安装...失败 - osx - 许多不满意的包

更新:运行ghc-pkg检查报告:

~: ghc-pkg check
WARNING: cache is out of date: /Library/Frameworks/GHC.framework/Versions/7.0.3i386/usr/lib/ghc-7.0.3/package.conf.d/package.cache
  use 'ghc-pkg recache' to fix.
~: ghc-pkg recache
Run Code Online (Sandbox Code Playgroud)

在那之后,cabal似乎更快乐了!


尝试安装yesod但第一次安装失败的原因是:

Building attoparsec-0.9.1.1...
Building library...
Creating dist/build (and its parents)
/usr/bin/ghc --make -package-name attoparsec-0.9.1.1 -hide-all-packages -fbuilding-cabal-package -i -idist/build -i. -idist/build/autogen -Idist/build/autogen -Idist/build -optP-DAPPLICATIVE_IN_BASE -optP-include -optPdist/build/autogen/cabal_macros.h -odir dist/build -hidir dist/build -stubdir dist/build -package-id base-4.3.1.0-167743fc0dd86f7f2a24843a933b9dce -package-id bytestring-0.9.1.10-77e44adc4117472276bab802bea3c036 -package-id containers-0.4.0.0-18deac99a132f04751d862b77aab136e -package-id deepseq-1.1.0.2-09b3aed0c4982bbc6569c668100876fa -O -Wall -XHaskell98 -XCPP Data.Attoparsec Data.Attoparsec.Char8 Data.Attoparsec.Combinator Data.Attoparsec.FastSet Data.Attoparsec.Lazy Data.Attoparsec.Number Data.Attoparsec.Zepto Data.Attoparsec.Internal Data.Attoparsec.Internal.Types
<command line>: cannot satisfy -package-id deepseq-1.1.0.2-09b3aed0c4982bbc6569c668100876fa
    (use -v …
Run Code Online (Sandbox Code Playgroud)

macos haskell yesod

13
推荐指数
1
解决办法
1748
查看次数

如何在Persistent中定义组合键

如何向Persistent声明我有一个表,其主键是两个字段的组合?

例如,假设我有一个包含first_name和last_name的表,那么在SQL语法中我需要类似的东西:

CONSTRAINT pk_PersonID PRIMARY KEY (first_name,last_name)
Run Code Online (Sandbox Code Playgroud)

谢谢,

haskell persistent yesod

13
推荐指数
2
解决办法
1527
查看次数