4

(私の問題は、haskellなしでバイナリを配布することです-プラットフォーム、ghc、cabal、...)

よくカバールで形成されたhaskellアプリケーション(Yesodスキャフォールド)をデプロイする必要がありますが、ディスク容量に制限があります。

GHCのサイズは約1Gバイトで、すべてのカバールのソースコード、パッケージなどを保存します...より多くのディスク容量などが必要です...

明らかに、haskell-platform、ghc、...は開発に関するものです(デプロイメントではありません)。

私の特定のケースでは、私は生成することができます

cabal clean && cabal configure && cabal build

正常に実行されます(のようなものもあります)

./dist/build/MyEntryPoint/MyEntryPoint arg arg arg

しかし、依存関係についてはどうでしょうか?それを本番環境にどのように移行するのでしょうか?(一緒に私の「遠い」編集)

カバールなしでバイナリ依存関係を設定できますか?どのように?

どうもありがとうございます!

4

1 に答える 1

8

デフォルトでは、ghcはHaskellライブラリの静的リンクを使用します。したがって、結果のバイナリはHaskellエコシステムから独立しています。プログラムにデータファイルが必要ない場合は、バイナリ./dist/build/MyEntryPoint/MyEntryPointをホストにコピーするだけです。

Cabalのデータパス検索ロジックを使用してバイナリによって参照されるデータファイル(テンプレート、画像、静的htmlページなど)もある場合は、次のように使用できSetup copyます(例としてhappyを使用)。

/tmp/happy-1.18.10 $ ./Setup configure
警告:セットアップスクリプトのdefaultUserHooksは非推奨になりました。
happyの設定-1.18.10..。
/tmp/happy-1.18.10$./セットアップビルド
幸せを構築する-1.18.10..。
実行可能ファイル「happy」をhappy-1.18.10..で前処理します。
[1 of 18] NameSetのコンパイル(src / NameSet.hs、dist / build / happy / happy-tmp / NameSet.o)
[..]
[18/18] Mainのコンパイル(src / Main.lhs、dist / build / happy / happy-tmp / Main.o)
dist / build / happy /happy..をリンクする
/tmp/happy-1.18.10 $ ./Setup copy --destdir = / tmp / to_be_deployed /
/ tmp / to_be_deployed / usr / local/binに実行可能ファイルをインストールする
/tmp/happy-1.18.10 $ find / tmp / to_be_deployed
/ tmp / to_be_deployed
/ tmp / to_be_deployed / usr
/ tmp / to_be_deployed / usr / local
/ tmp / to_be_deployed / usr / local / bin
/ tmp / to_be_deployed / usr / local / bin / happy
/ tmp / to_be_deployed / usr / local / share
/ tmp / to_be_deployed / usr / local / share / doc
/tmp/to_be_deployed/usr/local/share/doc/happy-1.18.10
/tmp/to_be_deployed/usr/local/share/doc/happy-1.18.10 / LICENSE
/tmp/to_be_deployed/usr/local/share/happy-1.18.10
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/GLR_Lib-ghc-デバッグ
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / GLR_Lib-ghc
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / GLR_Lib
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / GLR_Base
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / HappyTemplate-arrays-coerce-debug
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / HappyTemplate-arrays-ghc-debug
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / HappyTemplate-arrays-debug
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / HappyTemplate-arrays-coerce
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / HappyTemplate-arrays-ghc
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-arrays
/tmp/to_be_deployed/usr/local/share/happy-1.18.10/HappyTemplate-強制
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / HappyTemplate-ghc
/tmp/to_be_deployed/usr/local/share/happy-1.18.10 / HappyTemplate
/tmp/happy-1.18.10 $ rsync -rva /tmp/to_be_deployed/production.host:/
[..]

にインストールしたくない場合は/usr/local、目的のプレフィックスをに渡しますSetup configure

これは、ターゲットホストが他の点で類似している場合(gmpやffiなどの同じバージョンのCライブラリがインストールされている場合)にうまく機能します。一部のCライブラリも静的にリンクする必要がある場合は、hammarが彼のコメントでリンクしている質問を参照してください。

于 2012-11-15T10:52:55.077 に答える