4

を使用して Yesod スタブ Web サイトを生成し、テスト用yesod initに実行できましたyesod devel。しかし、私は通常、実際の haskell ソースをsrcメイン プロジェクト ディレクトリのサブディレクトリ、つまりファイルが存在する場所の 1 レベル下に置き<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」へのパスをハードコーディングしないことです。cabalファイル自体からそれを読み取る方法はありますか?

4

1 に答える 1

0

まあ、 cabal ファイルを解析して hs-source-dirs を特定する TH コードを書くこともできますが、それはやり過ぎだと思います。問題のファイルパスに「..」を追加するだけです。また、設定を編集し、glob 関数で遊んでみたいと思うでしょう。

于 2011-09-13T02:53:19.943 に答える