我需要一个使用Haskell开发的Web服务器来运行旧的Python CGI应用程序.
任何建议表示赞赏!
我正在学习所以这可能是一个微不足道的问题.
在yesod scaffolding工具生成的代码中,我找到了这个表达式:
type YesodPersistBackend PersistTest = SqlPersist
Run Code Online (Sandbox Code Playgroud)
我的理解是它创建了一个参数化类型YesodPersistBackend,它有一个类型参数PersistTest,这相当于类型SqlPersist.
它是否正确?如果是这样,为什么会为没有参数的类型创建一个带有参数的类型同义词?
我正在寻找一个VPS来部署Yesod网站,我想知道运行Yesod的系统要求是什么?我将使用Nginx和Warp作为系统配置.
我正在关注如何使用monadic形式的yesod书籍示例.我的getRootR动作几乎是从书中逐字记录下来的.我得到了一个编译器错误,剥离了quasiquote但仍然得到了错误.下面是我的错误消息,代码是原样,然后是我想要的getRootR.关于问题可能是什么的任何输入将非常感激.
ghci Rocko.hs
...几个"包装"消息传递到......
Rocko.hs:67:5:
Couldn't match type `handler'
with `GGHandler
Scheduler
Scheduler
(Data.Enumerator.Iteratee Data.ByteString.Internal.ByteString IO)'
`handler' is a rigid type variable bound by
the type signature for getRootR :: handler RepHtml at Rocko.hs:65:1
Expected type: handler RepHtml
Actual type: GGHandler
Scheduler
Scheduler
(Data.Enumerator.Iteratee Data.ByteString.Internal.ByteString IO)
RepHtml
Expected type: handler RepHtml
Actual type: GHandler Scheduler Scheduler RepHtml
In the return type of a call of `defaultLayout'
In the expression:
defaultLayout
(addHtml
((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
"<p>Result: </p>")) …Run Code Online (Sandbox Code Playgroud) 我正在阅读Toy URL Shortener的代码.然而,有一些重要的部分我无法理解.
它具有以下代码:
data URLShort = URLShort { state :: AcidState URLStore }
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我在自己的应用程序中写了这样的东西:
data MyApp = MyApp { state :: Int }
Run Code Online (Sandbox Code Playgroud)
然后我可以通过改变来编译
main = warpDebug 3000 MyApp
Run Code Online (Sandbox Code Playgroud)
至
main = warpDebug 3000 (MyApp 42)
Run Code Online (Sandbox Code Playgroud)
然后,我可以通过执行操作来读取处理程序中的状态
mystate <- fmap state getYesod
Run Code Online (Sandbox Code Playgroud)
受到acid <- fmap state getYesod文章的启发.但是,我不知道怎么写.
我也尝试过:
data MyApp = MyApp { state :: State Int Int }
Run Code Online (Sandbox Code Playgroud)
但我对此并没有做多少.
我试图AcidState通过做一些简单的类似例子来弄清楚它是如何工作的,并且认为既然AcidState将所有内容保存在内存中,我应该能够做同样的事情吗?
对这里发生的事情的任何形式的一般性解释,以及也许我如何忽略这一点都将非常感激.
我有以下代码:
data Friend = Friend
{ friend_name :: Text
, friend_inTwitter :: Bool
, friend_twitterName :: Maybe Text
}
$(deriveJSON (drop 6) ''Friend)
Run Code Online (Sandbox Code Playgroud)
这段JSON被发布到处理程序中,我很难获取它。我尝试了不同的方法,但让我将其中之一放在此处以产生建议:
postTestR :: Handler RepPlain
postTestR = do
value <- parseJsonBody_
return $ RepPlain $ friend_name value
Run Code Online (Sandbox Code Playgroud)
那是行不通的,我可以看到类型不匹配,但是我不确定用什么替换它。我还想看看如何解析以JSON形式发布的列表好友。
谢谢!
(我的问题是关于没有haskell-platform,ghc,cabal等的分发二进制文件)
我需要部署一个良好的cabal形成haskell应用程序(一个Yesod脚手架),但我有磁盘空间限制.
GHC大小约为1Gbytes,存储所有cabal源代码,包等...需要更多磁盘空间等...
显然,haskell-platform,ghc,...是关于开发(不是部署).
在我的具体情况下,我可以生成
cabal clean && cabal configure && cabal build
Run Code Online (Sandbox Code Playgroud)
并成功运行(有些像)
./dist/build/MyEntryPoint/MyEntryPoint arg arg arg
Run Code Online (Sandbox Code Playgroud)
但是,依赖关系呢?如何将其转移到生产环境?(连同我的"dist"汇编)
我可以在没有cabal的情况下放置二进制依赖项 怎么样?
非常感谢你!
我正在尝试渲染一个包含href值为的链接的页面"javascript:#{mySmallJsSnippet}",其中mySmallJsSnippet有一些Javascript会将当前页面添加到<script>标记中src="http://e.g.com/static/myFullJsFile.js".
我有几个问题,但主要的一个是令人尴尬的简单:
给定一条路线 - 例如StaticR myFullJsFile_js- 如何将路线的URL渲染为字符串,以便将其嵌入mySmallJsSnippet?基本上,我不知道如何在我的处理程序代码中执行Yesod的模板渲染机制自动执行的操作@{fooBaR}.
我怀疑它有做renderRoute和joinPath,但我没有使用joinPath正确的.到目前为止,我最好的猜测是App从Foundation.hs 导入并将其作为joinPath第一个参数传递- 不行.
我会继续寻找,但是能得到一些帮助会很棒,因为我确信对于有过Yesod经验的人来说这很简单.
我正在尝试使用selectRepYesod 1.2中的新功能,但是我无法让json响应工作.
instance ToJSON (Entity Feed) where
toJSON (Entity uid (Feed url lastUpdated)) = object
[ "id" .= uid
, "url" .= url
, "lastUpdated" .= lastUpdated
]
getFeedByIdR :: FeedId -> Handler TypedContent
getFeedByIdR feedId = do
feed <- runDB $ get404 feedId
selectRep $ do
provideRep $ return $ toJSON (Entity feedId feed)
Run Code Online (Sandbox Code Playgroud)
我从上面的代码得到的错误是
Handler/Feed.hs:23:31:
Overlapping instances for ToJSON (Entity Feed)
arising from a use of `toJSON'
Matching instances:
instance ToJSON e => ToJSON (Entity e) …Run Code Online (Sandbox Code Playgroud) 我承认,鉴于我有限的Haskell知识,我并不太了解Conduits.所以,如果有人可以指导我如何完成这项任务,那就表示赞赏:我想获取rawQuery动作的输出并将其存储在一个变量中,然后我可以在我的Hamlet文件中再次使用它.例如:
let sql = "SELECT sum(value) as total, category FROM person GROUP BY category ORDER BY total desc;"
--- ?? how to store this runDB output in a variable?
runDB $ rawQuery sql [] $$ CL.map (convertFromPersistent)
where
convertFromPersistent [] = Nothing
convertFromPersistent [PersistInt64 sum,PersistInt64 category] = Just (sum,category)
convertFromPersistent _ = Nothing
Run Code Online (Sandbox Code Playgroud)
当我做
runDB $ rawQuery sql [] $$ CL.mapM_ (liftIO. print. convertFromPersistent)
Run Code Online (Sandbox Code Playgroud)
我在日志文件中看到了输出.但是,我想将输出传递给元组数组,以便我可以在我的Hamlet文件中使用它.感谢您的帮助!
谢谢,