【问题标题】:How to connect to MySQL using Snap's MysqlSimple snaplet如何使用 Snap 的 MysqlSimple snaplet 连接到 MySQL
【发布时间】:2014-05-12 01:23:04
【问题描述】:

Snap Framework 有一个关于如何使用 snaplets 编写 Web 应用程序的教程。有一个用于连接 MySQL 的 snaplet,Snap.Snaplets.MysqlSimple,它依赖于库 Database.MySQL.Simple,而且似乎 snaplet 主要是一个瘦包装器,以保持连接句柄的隐式。

文档中唯一可用的示例不起作用。如a 2011 Haskell-cafe post (!) 中所述,该示例在派生结果的类型之前缺少一些类型注释。是否有一个功能齐全的 Snap 应用程序连接到 MySQL 并获取一些结果的简单示例?

其他问题:我想更改 MySQL 连接设置。运行应用程序会创建一个名为snaplets/mysql-simple/devel.cfg 的文件。即使在重新编译、重新启动和/或重新加载之后,更改此文件中的设置似乎也不会影响应用程序。

【问题讨论】:

    标签: mysql haskell haskell-snap-framework


    【解决方案1】:

    以下示例使用默认的 MySQL 连接设置:

    {-# LANGUAGE TemplateHaskell #-}
    {-# LANGUAGE OverloadedStrings #-}
    
    module Main where
    
    import Snap
    import Snap.Snaplet
    import Snap.Snaplet.Heist
    import Snap.Snaplet.MysqlSimple
    
    import Control.Lens.TH
    
    import Data.Int
    import Data.Maybe
    import qualified Data.Text as T
    
    data App = App
        { _heist       :: Snaplet (Heist App)
        , _db          :: Snaplet Mysql
        }
    
    makeLenses ''App
    
    instance HasHeist App where
      heistLens = subSnaplet heist
    
    main :: IO ()
    main = serveSnaplet defaultConfig appInit
    
    appInit :: SnapletInit App App
    appInit = makeSnaplet "myapp" "Some application" Nothing $ do
      h <- nestSnaplet "heist" heist $ heistInit "templates"
      d <- nestSnaplet "db" db mysqlInit
      addRoutes [ ("/", defaultHandler), ("", heistServe) ]
      return $ App h d
    
    defaultHandler :: Handler App App ()
    defaultHandler = do
      ns <- q
      forM_ ns $ \ (Only i) -> 
        writeText $ T.concat [ "id = ", T.pack (show i), "\n"]
    
    q :: Handler App App [Only Int64]
    q = with db $ query_ ("select id from sometable")
    

    【讨论】:

      猜你喜欢
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2012-07-04
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多