短縮版:
run.sh にインクルード パラメータがないようです。次のように変更します。
#!/bin/sh
runghc -isrc -isrc-interactive-only src/Main.hs
この変更を含めるために、darcs の run.sh を更新しました。
ロングバージョン:
通常、このフラグは Happstack アプリケーションには必要ありません。通常は、runhaskell Main.hs
. しかし、その特定の例では、 Main.hs は明示的にインポートします:
import Paths_guestbook (version)
これはversionInfo
、サーバーが独自のバージョン番号を報告できるように関数で使用されます。のバージョン番号src-interactive-only
はハードコードされており、通常は古くなっています。したがって、実際に cabal でビルドする場合にのみ正しいです。
Paths_guestbook
モジュールは通常、実行時に自動的に作成されますcabal build
。したがって、別の修正は、run.sh を次のように変更することです。
#!/bin/sh
runghc -isrc -idist/build/autogen src/Main.hs
cabal configure && cabal build
そして一度走る。その後、使用できるようになりますrun.sh
( を実行するまでcabal clean
)。
もう 1 つのオプションは、.cabal ファイルに CPP フラグを設定しPaths_guestbook
、アプリケーションが cabal を介してビルドされている場合にのみインポートすることです。
たとえば、happstack.com のソース コードでは次のようになります。
http://patch-tag.com/r/stepcut/happstackDotCom/snapshot/current/content/pretty/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