Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 是的,一个站点有多个持久后端_Haskell_Yesod - Fatal编程技术网

Haskell 是的,一个站点有多个持久后端

Haskell 是的,一个站点有多个持久后端,haskell,yesod,Haskell,Yesod,开发和生产之间的一种常见模式是开发人员网站将使用sqlite,因为它是零设置,但在生产中使用PostgresSQL或MySQL。但是,在Yesod生成的default Settings.hs scaffolding文件中,只指定了一个持久后端。有没有办法让开发配置使用一个持久化后端,而生产配置使用另一个?此外,这些数据库应该有不同的数据库设置YAML文件,这样就可以为sqlite配置一个简单的文件名,但生产数据库凭据永远不会进入VCS存储库。一般来说,我不喜欢这种做法,因为数据库引擎之间可能存在

开发和生产之间的一种常见模式是开发人员网站将使用sqlite,因为它是零设置,但在生产中使用PostgresSQL或MySQL。但是,在Yesod生成的default Settings.hs scaffolding文件中,只指定了一个持久后端。有没有办法让开发配置使用一个持久化后端,而生产配置使用另一个?此外,这些数据库应该有不同的数据库设置YAML文件,这样就可以为sqlite配置一个简单的文件名,但生产数据库凭据永远不会进入VCS存储库。

一般来说,我不喜欢这种做法,因为数据库引擎之间可能存在细微的差异,直到生产时才会显示出来。(这可以通过中间有一个临时服务器来缓解。)


无论如何,您当然可以通过条件编译来实现这一点,尽管搭建的站点并非设计成开箱即用的方式。只需查找所有引用特定后端的位置,并将其设置为DEVELOPMENT CPP变量的条件。

特别是,您需要更改backend/Application.hs(yml文件包括)和backend/Settings.hs(导入和持久配置定义)。提交示例: