2016-01-13 4 views
1

У меня есть простой Есод проект с обычной структурой каталогов, как это:Структуры каталогов Йесод и Stack

./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 под линией app (app dir - это .).

междусобойчик файл проекта выглядит следующим образом:

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 

widgetFileNoReload не знает, где найти «по умолчанию -layout ", которые находятся в каталоге app/templates.

Мой вопрос: Должен ли я писать файл cabal по-другому или разместить шаблоны, Handler ... папки в другом месте (например, в src)? Какова наиболее естественная структура каталогов при использовании стека? Или, альтернативно, как настроить параметры стека (файлы cabal и yaml), чтобы они соответствовали обычной структуре каталогов Yesod?

ответ

1

Если вы берете стандартные леса Yesod, он должен скомпилироваться без проблем со Stack (я фактически делаю это прямо сейчас, по сути). Я бы рекомендовал не перемещать архивные файлы, пока вы не знакомы с настройкой. Если вы действительно хотите переместить исходные файлы, я бы рекомендовал хранить шаблоны в исходном месте.