簡體   English   中英

運行 Haskell 應用程序時,Nix 派生不包括 cabal 數據文件

[英]Nix derivation does not include cabal data-files when running Haskell application

我有一個使用cabal.mkDerivation進行 Nix 派生的 haskell 項目。

當我在項目根目錄中運行nix-build ,我會在構建成功后得到預期的result符號鏈接。

如果我進入該目錄,我有 4 個目錄:

  • 垃圾桶
  • 尼克斯支持
  • 分享

我的可執行文件存在於bin 當我嘗試運行我的可執行文件時,它找不到我的應用程序文件和動態庫。 我知道這是由於缺少設置包的所有路徑的環境變量。

如何在不安裝的情況下使用正確的環境變量運行我的包的可執行文件?

我知道我可以使用nix-shell來使用cabal run來運行可執行文件,但我想在已部署狀態下運行可執行文件。

編輯 #1:更多信息

這是我的項目中的default.nix

{ haskellPackages ? (import <nixpkgs> {}).haskellPackages_ghc783_no_profiling }:

let
  inherit (haskellPackages)
    blazeHtml
    ... list of deps
    ;
in
  cabal.mkDerivation (self: {
    pname           = "myproject";
    version         = "0.0.1";
    src             = ./;
    enableSplitObjs = false;

    buildTools = [
      yesodBin
      cabalInstall
    ];

    buildDepends = [
      blazeHtml
      ... list of deps
    ];
})

這是我的 cabal 文件的相關部分,其中包含應用程序使用的數據文件列表:

data-files: config/favicon.ico
          , config/robots.txt
          , config/settings.yml
          , static/css/*.css
          , static/fonts/*.eot
          , static/fonts/*.svg
          , static/fonts/*.ttf
          , static/fonts/*.woff
          , static/img/*.jpg

當使用cabal install部署應用程序時,結構將是:

  myproject
▾ config
    favicon.ico
    robots.txt
    settings.yml 
▾ static
    ▸ css
    ▸ fonts
    ▸ img

可執行文件查找與當前工作目錄相關的所有文件。

安裝它也會有同樣的問題。 用 makeWrapper 包裝你的二進制文件並設置必要的環境變量。

這里的正確解決方案是不修復 nix 表達式。 相反,您應該擴展您的應用程序,使其使用由 cabal 生成的 Paths 模塊提供的getDataFileName來查找它的文件(您可以將其用作后備)。

有關更多信息,請參見: http : //neilmitchell.blogspot.de/2008/02/adding-data-files-using-cabal.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM