1

次のような通常のディレクトリ構造を持つ単純な Yesod プロジェクトがあります。

./Main.hs
./Foundation.hs
./Handler/Home.hs
./Handler/... etc
./config/routes
./templates/home.hamlet
./templates/default-layout.hamlet
./templates/default-layout-wrapper.hamlet
./templates/default-layout-wrapper.cassius
...

Main.hs通常、プログラムはappディレクトリ の下にあるスタックでこのプロジェクトをビルドしようとしています。

すべての Yesod 構造をappdir の下に配置しようとしました ( appdir は.上記です)。

プロジェクトの cabal ファイルは次のようになります。

executable proj-web01-exe
  hs-source-dirs:      app
  main-is:             Main.hs
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  build-depends:       base, bytestring, split, filepath
                     , stm, data-default, text, conduit, conduit-extra
                     , containers, resourcet, blaze-html, blaze-markup
                     , shakespeare, yesod, yesod-static
                     , proj-web01
  default-language:    Haskell2010

しようとするとstack build、次のエラー メッセージが表示されます。

[1 of 6] Compiling Foundation       ( app/Foundation.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/proj-web01-exe/proj-web01-exe-tmp/Foundation.o )

/home/me/proj-web01/app/Foundation.hs:46:35:
    Exception when trying to run compile-time code:
      Called widgetFileNoReload on "default-layout", but no templates were found.
    Code: widgetFileNoReload (def) "default-layout"
    In the splice: $(widgetFileNoReload def "default-layout")

--  While building package proj-web01-0.1.0.0 using:
      /home/me/.stack/setup-exe-cache/x86_64-linux/setup-Simple-Cabal-1.22.5.0-ghc-7.10.3 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.5.0 build lib:proj-web01 exe:proj-web01-exe --ghc-options " -ddump-hi -ddump-to-file"
    Process exited with code: ExitFailure 1

widgetFileNoReloadapp/templatesディレクトリにある「default-layout」ファイルの場所がわかりません。

私の質問: cabal ファイルを別の方法で作成する必要がありますか、それともテンプレート、Handler... フォルダーを別の場所 (src など) に配置する必要がありますか? スタックを使用する場合、最も自然なディレクトリ構造は何ですか? または、通常の Yesod ディレクトリ構造に合わせてスタック パラメータ (cabal および yaml ファイル) を設定する方法を教えてください。

4

1 に答える 1

1

標準の Yesod スキャフォールディングを使用すると、Stack で問題なくコンパイルできるはずです (実際のところ、私は実際にそれを行っています)。セットアップに慣れるまでは、スキャフォールディングされたファイルを移動しないことをお勧めします。本当にソース ファイルを移動したい場合は、テンプレートを元の場所に保持することをお勧めします。

于 2016-01-13T14:08:55.563 に答える