Запустите приложение HAppStack с помощью клики - PullRequest
0 голосов
/ 26 января 2012

Я пробую HAppStack.Я установил HAppStack и создал проект: happstack new project web.Создана новая папка «web» с гостевой книгой проекта.Так что теперь я хочу запустить его.Единственный способ сделать это - запустить cabal install.Но я хочу запустить свое приложение без установки вместе с cabal!Ошибка run.sh: не удалось найти модуль Paths_guestbook.Как я могу это сделать?

Редактировать: В общем, есть ли способ запустить приложение HAppStack без перестройки, как в Snap?

Ответы [ 2 ]

1 голос
/ 26 января 2012

В общем, вы всегда можете собрать проекты Cabal без установки, просто выполнив:

$ cabal configure
$ cabal build

Полученный исполняемый файл обычно будет называться dist/build/<project>/<project>.

Конкретная ошибка, с которой вы столкнулисьПолучение происходит потому, что для получения модуля Paths_guestbook код должен быть собран вместе с Cabal, который будет содержать информацию о расположении используемых им файлов данных.(Возможно, вам не удастся найти эти файлы данных, если вы запустите исполняемый файл без его установки; в этом случае вам потребуется более сложное решение, такое как cabal-dev .)

(Я не пользователь Happstack, поэтому я не знаю, есть ли официальный способ сделать это, но это должно работать в основном для любого проекта на основе Cabal в целом. Репозиторий показывает, что run.shПоследнее изменение было в 2009 , так что я подозреваю, что оно просто немного прогнило. Но ничего особенного не делает, поэтому cabal build должно работать просто отлично.)

0 голосов
/ 02 февраля 2012

КРАТКАЯ ВЕРСИЯ:

В файле 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

...