0

HAppStack を試しています。HAppStack をインストールし、プロジェクトを作成しました: happstack new project web. その下にプロジェクト ゲストブックを含む新しいフォルダー 'web' が作成されました。だから今、私はそれを実行したいと思います。私ができる唯一の方法は runcabal installです。しかし、cabal でインストールせずにアプリを実行したい! run.sh の実行エラー: モジュール 'Paths_guestbook' が見つかりませんでした。どうすればいいですか?

編集: 一般に、スナップのように再構築せずに HAppStack アプリを実行する方法はありますか?

4

2 に答える 2

1

一般に、次のようにするだけで、インストールせずにいつでも Cabal プロジェクトをビルドできます。

$ cabal configure
$ cabal build

結果の実行可能ファイルは、通常、dist/build/<project>/<project>.

あなたが得ている特定のエラーは、Cabal でPaths_guestbook使用されるデータ ファイルの場所に関する情報を含むモジュールを取得するためにコードをビルドする必要があるためです。(実行可能ファイルをインストールせずに実行すると、これらのデータ ファイルが見つからない場合があります。その場合は、cabal-devなどのより複雑なソリューションが必要になります。)

(私は Happstack ユーザーではないので、これを達成するための公式の方法があるかどうかはわかりませんが、これは基本的にすべての Cabal ベースのプロジェクトで一般的に機能するはずです。リポジトリは、2009 年run.shに最後に変更されたことを示しているので、私は単に少し腐っていると思われますが、特別なことは何もしていないので、問題なく動作するはずです。)cabal build

于 2012-01-26T11:52:30.560 に答える
0

短縮版:

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

于 2012-02-02T03:49:44.317 に答える