КРАТКАЯ ВЕРСИЯ:
В файле run.sh отсутствует параметр включения. Измените его так, чтобы он выглядел так:
#!/bin/sh
runghc -isrc -isrc-interactive-only src/Main.hs
Я обновил run.sh в darcs, чтобы включить это изменение.
ДЛИТЕЛЬНАЯ ВЕРСИЯ:
Обычно этот флаг не требуется для приложений Happstack. Вы можете просто сделать, runhaskell Main.hs
. Но в этом конкретном примере Main.hs явно импортирует:
import Paths_guestbook (version)
, который используется в функции versionInfo
, чтобы сервер мог сообщать свой собственный номер версии. Хотя номер версии в src-interactive-only
жестко запрограммирован и, как правило, устарел. Так что это правильно, только если вы на самом деле строите из клики.
Модуль Paths_guestbook
обычно создается автоматически при запуске cabal build
. Итак, еще одно исправление - изменить run.sh на:
#!/bin/sh
runghc -isrc -idist/build/autogen src/Main.hs
И запустить cabal configure && cabal build
один раз. После этого вы сможете использовать run.sh
(пока не сделаете cabal clean
).
Другой вариант - установить флаг CPP в файле .cabal и импортировать Paths_guestbook
только при сборке приложения с помощью cabal.
Например, в исходном коде happstack.com:
http://patch -tag.com / г / stepcut / happstackDotCom / снимок / текущий / содержание / очень / Main.hs
В строке 40 (или около того) вы увидите #ifdef __CABAL__
. happstack.com должен знать, где найти статический контент, например, файлы .css. При выполнении runhaskell Main.hs
в локальном каталоге он будет искать файлы в подкаталоге локального каталога. Если вы сделаете cabal install
, вместо этого будет выглядеть, когда cabal
установит файлы данных. Или вы можете переопределить расположение по умолчанию с помощью аргументов командной строки. (Что делает упаковка Debian для этого приложения).
К сожалению, команда happstack new project
несколько заурядна, потому что автор стал родителем и долгое время не работал над ней. Вероятно, он будет удален из предстоящего выпуска Happstack, чтобы уменьшить путаницу.
Чтобы быть действительно полезным, я думаю, что команда должна запросить набор значений и затем сгенерировать новый проект из набора шаблонов. Похоже на то, как работает 'cabal init'. Но в настоящее время никто не предложил время, чтобы это произошло.
Чтобы изменения в вашем источнике появлялись автоматически без перезапуска сервера, вы можете использовать библиотеку happstack-plugins
. Здесь есть скринкаст:
http://happstack.blogspot.com/2010/10/recompile-your-haskell-based-templates.html