我使用yesod init
生成了Yesod存根网站,并且能够运行yesod devel
进行测试。但是,我通常将实际的haskell源放在主项目目录的子目录src
中,即位于<project>.cabal
文件所在位置的一个级别。
但是,当我将yesod网站移至src
并更改cabal文件以添加行hs-source-dir: src
时,我收到的错误类似于以下内容 -
src/Model.hs:12:57:
Exception when trying to run compile-time code:
config/models: openFile: does not exist (No such file or directory)
Code: persistFile "config/models"
In the second argument of `share', namely
`$(persistFile "config/models")'
In the expression:
share
[mkPersist sqlSettings, mkMigrate "migrateAll"]
($(persistFile "config/models"))
看起来Yesod使用了大量编译时生成的代码,需要对各种目录的路径进行硬编码。解决此问题的最佳方法是什么?我理想的做法是不要在代码库上硬编码“src”alll的路径。有没有想过从cabal文件中读取它?
答案 0 :(得分:0)
好吧,你可以编写一些解析cabal文件的TH代码来确定hs-source-dirs,但我认为这太过分了。只是在问题的文件路径前加上一个“..”。您还需要编辑“设置”并使用glob函数进行播放。