标签: yesod

yesod在闲置时是否使用处理器?

我使用yesod创建了一个非常简单的应用程序.它并不是很常用,但是当我用htop检查时,它比服务器中的所有其他进程消耗了更多的CPU时间,包括运行时间更长的进程.此外,当我启动该过程时,我发现即使没有发出请求(大多数情况下没有发出请求),它的处理器使用时间也会不断增加.使用yesod应用程序这是常见的还是预期的?

haskell yesod

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

用Persistent和Esqueleto连接在sql中表示和类型

我一直试图找出一种合理的方法来使用持久性来表示SQL后端中的Haskell和类型.

我的目标Haskell数据类型是沿着的

data Widget = FooWidget Int | BarWidget T.Text

data HElement = HElement 
   { name   :: T.Text
   , widget :: Widget
   }
Run Code Online (Sandbox Code Playgroud)

我使用以下持久数据类型对它们进行建模:

Element
  name    T.Text

Foo
  elementId ElementId
  size      Int

Bar
  elementId ElementId
  colour    T.Text
Run Code Online (Sandbox Code Playgroud)

每个元素都只有Foo或Bar,而不是两者.

我想用a Left Outer Join来选择我的所有元素和相应的Foo OR Bar.我的Esqueleto表达式是:

select $ 
from $ \(elem `LeftOuterJoin` foo `LeftOuterJoin` bar) -> do
on (just (elem ^. ElementId) ==. foo ?. FooElementId)
on (just (elem ^. ElementId) ==. bar ?. BarElementId)
return (elem, foo, bar)
Run Code Online (Sandbox Code Playgroud)

但是,当我执行代码时,我收到错误:

user …
Run Code Online (Sandbox Code Playgroud)

haskell persistent yesod esqueleto

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

使用Yesod高效上传大文件

我想用我的Yesod应用程序实现大文件上传.现在我有:

module Handler.File where

import Import

import System.Random
import System.FilePath
import Control.Monad
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Text.Encoding

-- upload

uploadDirectory :: FilePath -- FIXME: make this configurable
uploadDirectory = "incoming"

randomFileName :: IO FilePath
randomFileName = do
  fname'base <- replicateM 20 (randomRIO ('a','z'))
  let fname = uploadDirectory </> fname'base <.> "bin"
  return fname

fileUploadForm :: Form (FileInfo, Textarea)
fileUploadForm = renderDivs $ (,)
    <$> fileAFormReq "Choose a file"
    <*> areq textareaField "What's on the file?" Nothing

getFileNewR …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

12
推荐指数
1
解决办法
1281
查看次数

Yesod/Persistent的MongoDB示例

Haskell和Yesod新手在这里.我一直在尝试从Yesod书中的Persistent章节(http://www.yesodweb.com/book/persistent)中跟踪与Yesod示例的集成.似乎Sqlite编译并运行良好.但是,我正在尝试使用MongDB,并且很难让事情发挥作用.特别:

  1. 在sqlite的示例中:

    share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|

    Yesod书中说"Mongo代码将mongoSettings改为使用".但我无法在任何模块中找到它,并且代码无法编译.所以相反,我不得不使用它而不是mongoSettings:

    MkPersistSettings { mpsBackend = ConT ''Action }

    我必须导入Language.Haskell.TH.Syntax才能让它进行编译,我假设它应该对用户隐藏,所以我当然不是正确的.

    另外,我发现在Mongo的Persistent测试中没有"share"和"migrate"部分.我实际上不确定为什么,我猜它是因为MongoDB是Schema-less而不需要迁移?

  2. SqlPersist

    我认为MongoPersist是SqlPersist的对应物,我猜它几乎是 - 我MongoPersist在Persistent的测试目录中的init.hs中找到了一个实例.但它被评论出来了,所以我觉得它已经过时了?否则,就我所知,它无论如何都没有定义.所以我不知道如何转换以下行(Yesod书的第115页,或接近http://www.yesodweb.com/book/persistent的末尾)来为MongoDB工作:

    instance YesodPersist PersistTest where
        type YesodPersistBackend PersistTest = SqlPersist
        runDB action = do
            PersistTest pool <- getYesod
            runSqlPool action pool
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用withMongoDBConn

    所以对于sqlite,代码是(上面网页的第一个例子):

    main :: IO ()
    main = withSqliteConn ":memory:" $ runSqlConn $ do
        runMigration migrateAll
        johnId <- insert $ Person "John Doe" $ Just 35
        ... and …
    Run Code Online (Sandbox Code Playgroud)

haskell persistent mongodb yesod

12
推荐指数
1
解决办法
3068
查看次数

使用Yesod将邮件发送到电子邮件地址

嗨,大家好

我无法找到任何好的文档或如何使用Yesod将邮件发送到电子邮件地址的示例.

更实际的是,我将提取用户在简单表单(姓名,年龄,邮件正文)中键入的信息,并将此信息作为邮件发送到电子邮件地址.

我有点迷失在这个任务中.
谢谢您的帮助.

email haskell yesod

12
推荐指数
1
解决办法
1284
查看次数

键入从GHCJS客户端到Yesod/Snap/Servant的安全RPC调用示例

我有两个关于RPC调用的相关问题Yesod/Snap/Servant:

  1. 假设我在服务器上有一个函数,用Haskell编写,由GHC编译:

    add x y = x+y+42

怎么能:

  1. 我从客户端调用此函数(客户端也是用Haskell编写的,用它编译GHCJS),
  2. 在服务器上执行该功能,
  3. 将结果返回给客户端?

以类型安全的方式做所有这些吗?

例如,我想在客户端上写这样的东西:

main= putStrLn $ show $ add 2 3
Run Code Online (Sandbox Code Playgroud)

这样add函数就可以在服务器执行.

Yesod/Snap/Servant在客户端上使用服务器和GHCJS 进行此操作的最简单方法是什么?

2)同样,我想写一个"功能": getPhaseOfMoon :: IO Phase它在服务器上运行,我想以getPhaseOfMoon类型安全的方式从客户端调用.

所以我可以在客户端上写这个:

main= do 
   p<-getPhaseOfMoon
   putStrLn $ show p
   return ()
Run Code Online (Sandbox Code Playgroud)

哪一个

  1. 去服务器
  2. 服务器参考月相
  3. 服务器返回Phase客户端
  4. 客户端在JavaScript控制台中显示月相.

我怎么能用Yesod/Snap/Servant(服务器)+ GHCJS(客户端)做到这一点?

haskell yesod haskell-snap-framework transpiler ghcjs

12
推荐指数
0
解决办法
454
查看次数

Yesod(hamlet)模板中的注释语法是什么?

我只是找不到如何在hamlet模板中注释行.是否有一些注释语法?喜欢

-- <p>Some code should be ignored by template
Run Code Online (Sandbox Code Playgroud)

或者其他的东西?

templates haskell yesod hamlet shakespeare-text

12
推荐指数
1
解决办法
594
查看次数

如何在yesod中使用UTCTime而不会出现隐藏的模块错误?

我正在使用yesod创建一个简单的网站.

它一直工作,直到我向我的数据库模型添加了UTCTime类型的字段.

我最初得到一个错误,建议我在我的cabal文件中添加"time-1.2.0.3",所以我做了,现在我得到了相同的错误,没有建议:

Model.hs:6:8:
    Could not find module `Data.Time.Clock.UTC':
      it is a hidden module in the package `time-1.2.0.3'
      Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)

cabal生成的ghc命令行是:

"C:\Program Files (x86)\Haskell Platform\2011.2.0.1\bin\ghc.exe" --make -o dist\build\lpi\lpi.exe -hide-all-packages -fbuilding-cabal-package -package-conf dist\package.conf.inplace -i -idist\build\lpi\lpi-tmp -i. -idist\build\autogen -Idist\build\autogen -Idist\build\lpi\lpi-tmp -optP-DPRODUCTION -optP-include -optPdist\build\autogen\cabal_macros.h -odir dist\build\lpi\lpi-tmp -hidir dist\build\lpi\lpi-tmp -stubdir dist\build\lpi\lpi-tmp -package-id base-4.3.1.0-f520cd232cc386346843c4a12b63f44b -package-id bytestring-0.9.1.10-cd85f14e02463c02ba4c77d7adcdb54f -package-id clientsession-0.7.3.6-70ebb09e2b4c14267f1463cef3c932ea -package-id hamlet-0.10.5-1bacb5fe791e5cc9e28c8cf9f07c06e2 -package-id hjsmin-0.0.14-a1d374204877c150b681896452f205f4 -package-id mime-mail-0.4.1.0-05d76f10c6f18f7178113a6d760f371a -package-id monad-control-0.3.1-092d8fe82727181557b850f795f847bc -package-id persistent-0.6.4.3-6e59b956a206ce4f4a9296367507c2b8 -package-id persistent-sqlite-0.6.2.1-d32462e51baa09b53b6fd83dae922fc7 -package-id shakespeare-css-0.10.4-f8e17e4528d3a37edee74b13441720de -package-id shakespeare-js-0.10.3-dfec6b68f60671528332da06c9799659 -package-id shakespeare-text-0.10.3-a0ae9b85c3588ff2572080a6d1cdd4c3 …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

11
推荐指数
1
解决办法
1171
查看次数

编写Database.Esqueleto查询,条件连接和计数

如何以模块化方式编写Database.Esqueleto查询,以便在定义"基本"查询和相应的结果集之后,我可以通过添加其他内部联接和表达式来限制结果集.

此外,如何将返回实体(或字段元组)列表的基本查询转换为计算结果集的查询,因为基本查询不是这样执行的,而是使用LIMIT和OFFSET修改它的版本.

Yesod Book中采用的以下不正确的Haskell代码片段有望澄清我的目标.

{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings #-}
{-# LANGUAGE GADTs, FlexibleContexts #-}
import qualified Database.Persist as P
import qualified Database.Persist.Sqlite as PS
import Database.Persist.TH
import Control.Monad.IO.Class (liftIO)
import Data.Conduit
import Control.Monad.Logger
import Database.Esqueleto
import Control.Applicative

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Person
    name String
    age Int Maybe
    deriving Show
BlogPost
    title String
    authorId PersonId
    deriving Show
Comment
    comment String
    blogPostId BlogPostId
|]

main :: IO ()
main = runStdoutLoggingT $ runResourceT $ PS.withSqliteConn …
Run Code Online (Sandbox Code Playgroud)

sql haskell yesod

11
推荐指数
2
解决办法
1292
查看次数

有没有办法杀死GHCi会话中的所有分叉线程而不重新启动它?

基于我之前的问题,我想询问是否有办法在GHCi会话中杀死所有用户创建的线程?

这样做的原因是当一个函数退出GHCi时,它产生的线程不会自动终止,即使通过代码重新加载也会持久化.重新启动GHCi解决了这个问题,但由于我的应用程序需要一段时间才能加载,如果有可能(甚至是hacky)的解决方法,那将会很棒.

multithreading haskell ghc yesod

11
推荐指数
1
解决办法
825
查看次数