子目录中的Yesod应用程序源

时间:2011-09-12 21:44:52

标签: haskell yesod

我使用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文件中读取它?

1 个答案:

答案 0 :(得分:0)

好吧,你可以编写一些解析cabal文件的TH代码来确定hs-source-dirs,但我认为这太过分了。只是在问题的文件路径前加上一个“..”。您还需要编辑“设置”并使用glob函数进行播放。