标签: yesod

如何在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
查看次数

在haskell中编写facebook应用程序的最佳方法是什么?

我正在haskell和yesod web框架中构建一个站点作为辅助项目,我想要做的是创建一个Facebook应用程序,让用户搜索他们的墙和他们的朋友和组的墙.

我考虑过使用JavaScript SDK,但是大部分工作都会在postSearhR辅助函数调用的辅助函数后面发生,所以这样就行不通了.

搜索谷歌的短语'haskell'构建Facebook应用程序"'并且变体不会变成任何东西,一眼看到hackage在版本0.30显示一个名为happstack-facebok的包,没有任何黑头鳕文档的方式.使用haskell和facebook标签搜索SO也不会返回任何有用的内容.

有谁知道我可以使用的一个例子?

haskell facebook yesod

10
推荐指数
1
解决办法
1135
查看次数

Yesod中的Websockets?

我想使用Yesod和websockets(html5)创建一个网站.

我可以使用带有Yesod webframework的websockets吗?

haskell websocket yesod

10
推荐指数
1
解决办法
1603
查看次数

Yesod ExitFailure 1安装脚手架应用程序时

我正在尝试安装我的第一个脚手架Yesod应用程序.当我运行cabal-dev install && yesod --dev devel它失败时使用ExitFailure 1.我使用sqlite进行持久化.

Application.hs:49:44:
No instance for (monad-logger-0.3.1:Control.Monad.Logger.MonadLogger
                   IO)
  arising from a use of `runMigration'
Possible fix:
  add an instance declaration for
  (monad-logger-0.3.1:Control.Monad.Logger.MonadLogger IO)
In the second argument of `Database.Persist.Store.runPool', namely
  `(runMigration migrateAll)'
In a stmt of a 'do' block:
  Database.Persist.Store.runPool dbconf (runMigration migrateAll) p
In the expression:
  do { manager <- newManager def;
       s <- staticSite;
       dbconf <- withYamlEnvironment
                   "config/sqlite.yml" (appEnv conf) Database.Persist.Store.loadConfig
                 >>= Database.Persist.Store.applyEnv;
       p <- Database.Persist.Store.createPoolConfig
              (dbconf :: PersistConfig);
       .... } …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

10
推荐指数
2
解决办法
781
查看次数

Yesod:在AJAX调用中使用类型安全URL

在我的Yesod项目中,我有以下路线:

/api/hide/thread/#Text/#Int      ApiHideThreadR   GET
Run Code Online (Sandbox Code Playgroud)

我想用javascript在客户端请求它:

function hideThreadCompletely(threadId, board) {
    $.getJSON("/api/hide/thread/"+board+"/"+threadId, function(data) {
        $('#thread-'+threadId).hide();
    });
}
Run Code Online (Sandbox Code Playgroud)

但我无法使用,@{ApiHideTHreadR}因为Yesod需要它在编译时的参数.什么是这种情况的妥善解决,如果我想API网址的样子api/board/1/1,而不是api/board?bid=1&tid=1?继续使用手动定义的URL "/api/hide/thread/"+board+"/"+threadId吗?

javascript ajax haskell yesod

10
推荐指数
1
解决办法
430
查看次数

如何在Yesod中进行(基于角色的)访问控制?

我想知道Handler在Yesod中为用户/权限或资源添加角色的最佳方法是什么.有没有人有这种东西的先前艺术?是否有任何方法利用类型系统来帮助防止漏洞(并且还要保持数据库查询以检查所有权等)?

编辑:很抱歉错过了这个 - 我确实注意到实际上有一个部分,我乍一看(我认为因为没有提及访问/角色/权限),在Yesod书中的授权.这似乎在路由器级别使用PUT/POST的写标志进行访问控制.它本身看起来并不十分复杂,但它看起来很适合在顶部构建抽象...

haskell authorization access-control rbac yesod

10
推荐指数
1
解决办法
630
查看次数

Haskell Persistent:如果我有整数变量的密钥,如何通过密钥从db获取实体?

我使用Persistent orm和scotty web框架.

我希望通过id从db获取值.这些ID来自GET请求

有"获取"功能,它接受"密钥实体"变量并返回"可能实体".

我使用以下代码从db获取值

k <- keyFromValues $ [(PersistInt64 myOwnIntVarFromRequest)]
case k of
    Left _ -> {-some processing-}
    Right x -> do
    t <- liftIO . runDb $ get (x::Key Post) --Post is one of my models
    case t of
        Nothing -> {-processing-}
        Just x -> {-processing-}
Run Code Online (Sandbox Code Playgroud)

这些代码非常丑陋.但我不知道如何做得更好

所以我的问题是如何在不调用keyFromValues的情况下获取"Key Entity"类型的变量.

PS抱歉我的英语不好

haskell persistent yesod scotty

10
推荐指数
1
解决办法
1606
查看次数

如何让默认值来自数据库?

为什么user对象仍具有Nothing用于createdAtupdatedAt?为什么这些字段没有被数据库分配?

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
User
  email String
  createdAt UTCTime Maybe default=CURRENT_TIME
  updatedAt UTCTime Maybe default=CURRENT_TIME
  deriving Show
|]

main = runSqlite ":memory:" $ do
  runMigration migrateAll
  userId <- insert $ User "saurabhnanda@gmail.com" Nothing Nothing
  liftIO $ print userId
  user <- get userId
  case user of
    Nothing -> liftIO $ putStrLn ("coulnt find userId=" ++ (show userId))
    Just u -> liftIO $ putStrLn ("user=" ++ (show user))
Run Code Online (Sandbox Code Playgroud)

输出:

UserKey {unUserKey …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

10
推荐指数
2
解决办法
743
查看次数