我有一个本地静态Javascript文件,我想包括在整个网站范围内.我希望将所有静态Javascript文件合并到一个文件中,但我想分别管理这些文件.静态Javascript文件应该包含在Yesod项目中的哪个位置?
我一直试图想出一种简单直观的方法来使用Haskell数据库.我从Yesod书中获取了这些代码并试图将其清理干净,以便更容易理解和使用.
{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings #-}
{-# LANGUAGE GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.Sqlite (withSqliteConn, runSqlConn, runMigration)
import Database.Persist.TH (share, mkPersist, mkMigrate, sqlSettings, persist)
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
Person -- Table name
name String -- String value
age Int Maybe -- Numerical value
|]
updateDB x y = withSqliteConn "data.db" $ runSqlConn $ do
runMigration migrateAll -- Creates "Person" table if one doesn't exist
insert $ Person x $ Just y -- Inserts …Run Code Online (Sandbox Code Playgroud) 所以我的/ config/models看起来像这样.
Person
name Text
Car
name Text
PersonCar
personId PersionId eq
carId CarId eq
UniquePersonCar personId carId
Run Code Online (Sandbox Code Playgroud)
假设数据库中的输入Person "Batman" Person "Superman" Car "SUV" Car "Ford"分别是.
我正在这样做,以便在我的处理程序中将它们链接起来.
runDB $ do
person <- selectFirst [PersonName ==. "Batman"] []
car <- selectFirst [Carname ==. "SUV"] []
let Entity personId _ = case person of
Just info -> infor
Nothing -> error "no such Person"
let Entity carId _ = case car of
Just info -> infor
Nothing -> error "no …Run Code Online (Sandbox Code Playgroud) 我正在尝试从Yesod的处理程序中编写一个最简单的JSON响应,但有一些非常愚蠢的错误(显然).我的处理程序代码如下:
-- HelloYesod/Handler/Echo.hs
module Handler.Echo where
import Data.Aeson (object, (.=))
import qualified Data.Aeson as J
import Data.Text (pack)
import Import
import Yesod.Core.Json (returnJson)
getEchoR :: String -> Handler RepJson
getEchoR theText = do
let json = object $ ["data" .= "val"]
return json
Run Code Online (Sandbox Code Playgroud)
错误是这样的:
Handler/Echo.hs:12:10:
Couldn't match expected type `RepJson' with actual type `Value'
In the first argument of `return', namely `json'
In a stmt of a 'do' block: return json
In the expression:
do { let json = object …Run Code Online (Sandbox Code Playgroud) 我正在尝试从客户端到服务器进行基本的JSON通信,使用以下Elm代码:
import open Http
result res = case res of
Success a -> a
Waiting -> "Waiting"
Failure n a-> "Failure " ++ (show n) ++ " " ++ (show a)
main = lift asText <| lift (show . result) <| send <| constant <| post "http://localhost:3000" "{foo : true}"
Run Code Online (Sandbox Code Playgroud)
服务器完全如Yesod书的这一部分所示.
但是,当我运行请求时,我得到了输出
"\"Failure 0 []\""
Run Code Online (Sandbox Code Playgroud)
有没有人知道我要做些什么来让Elm客户端与Yesod服务器正常通信?我尝试过一个Python客户端,请求工作得很好.同样,在Yesod网站上有几个成功的Http请求的例子,所以我相信两个库都正常工作,但我使用它们是错误的.
更新:问题是客户端.我能够使用Chrome并禁用安全选项,并且不对Yesod进行任何更改.我会寻找一种解决方法,但这至少足以让我的开发继续下去.
对于像这样的数据类型
data Tree = Node String Tree Tree
| Leaf String
Run Code Online (Sandbox Code Playgroud)
和真实的数据一样
my_tree = (Node "first node" (Leaf "leaf") (Node "second node" (Leaf "leaf") (Leaf "leaf")))
Run Code Online (Sandbox Code Playgroud)
如何使用持久性将其存储到数据库中,具体如何执行"OR"部分?
我试过像这样定义模型
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Tree
value String
leftTree Leaf
rightTree Leaf
deriving Show
Leaf
value String
deriving Show
|]
Run Code Online (Sandbox Code Playgroud)
递归结构将作为json字符串自动存储在一行中的列中,这非常好.但是我们如何或者可以在持久模型中定义"OR"结构?
我正在使用Yesod编写JSON RESTFul服务,需要实现请求验证.因为服务接受JSON,我不能使用Yesod.Form.我喜欢scalaz验证使用的方式,但我没有在Haskell中找到这样的方法.
是否有最佳实践来实现验证,允许回答结构化错误消息,如下所示:
{
"birthDate": "2017.07.14",
"count": "three",
"kind": "baz",
"entity": {
"id": -1
}
}
Run Code Online (Sandbox Code Playgroud)
{
"errors": {
"birthDate": "Date should be less than 2014.05.25", // current date
"count": "should be a number",
"kind": "must be one of [foo, bar]",
"entity": {
"id": "Entity with id -1 not found"
}
}
}
Run Code Online (Sandbox Code Playgroud) 我使用GHC 7.8.3和Yesod 1.4.9遇到了小的CPU泄漏.
当我运行我的网站time并在1分钟后停止它(Ctrl + C)而没有做任何事情(只运行,根本没有请求),它消耗1秒.它占CPU的约1.7%.
$ time mysite
^C
real 1m0.226s
user 0m1.024s
sys 0m0.060s
Run Code Online (Sandbox Code Playgroud)
如果我禁用空闲垃圾收集器,它会下降到0.35秒(占CPU的0.6%).虽然它更好,但它仍然消耗CPU而不做任何事情.
$ time mysite +RTS -I0 # Disable idle GC
^C
real 1m0.519s
user 0m0.352s
sys 0m0.064s
$ time mysite +RTS -I0
^C
real 4m0.676s
user 0m0.888s
sys 0m0.468s
$ time mysite +RTS -I0
^C
real 7m28.282s
user 0m1.452s
sys 0m0.976s
Run Code Online (Sandbox Code Playgroud)
与cat无限期等待标准输入上的某些命令相比:
$ time cat
^C
real 1m1.349s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
Haskell中还有其他东西在后台消耗CPU吗?
这是Yesod的漏洞吗?
或者这是我在我的程序中完成的事情?(我只添加了处理函数,我不做并行计算)
编辑2015-05-31 19:25
这是执行-s标志: …
我在Yesod Web应用程序的示例代码中看到了这种表示法,并且不知道它意味着什么:
getHomeR :: Handler Html
getHomeR = do
App {..} <- getYesod
Run Code Online (Sandbox Code Playgroud)
这个语法是什么意思?
我也看到了以下内容,我假设相关的符号:
getHomeR :: Handler Html
getHomeR = do
App x <- getYesod
Run Code Online (Sandbox Code Playgroud)
即一些标识符x代替神秘的{..}.