Nix衍生物在运行Haskell应用程序时不包括cabal数据文件

3
我有一个使用cabal.mkDerivation创建Nix派生物的Haskell项目。
在项目根目录中运行nix-build后,成功构建后会得到预期的result符号链接。
如果我进入该目录,会看到4个目录:
- bin - lib - nix-support - share 我的可执行文件存在于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

可执行文件相对于当前工作目录查找所有文件。

1
你的应用程序通常如何找到它的文件?你使用 cabal 生成的 _Paths 模块吗? - bennofs
@bennofs 目录 configstatic 在项目的根目录下。因此,当我在项目根目录中运行 cabal run 时,文件会相对查找。有关更多信息,请参见我的编辑。 - rzetterberg
2个回答

2

2
安装它会有相同的问题。使用makeWrapper将您的二进制文件包装起来,并设置必要的环境变量。

我刚刚发现在 cabal.mkDerivation 中启用 isExecutable 可以自动修复此问题。 - rzetterberg
有没有想法如何修复应用程序使用的数据文件的查找?现在它们存在于“$out/share/x86_64-linux-ghc-7.8.3/myproject-0.0.1/”中。似乎找不到nixpkgs中执行此操作的其他应用程序的示例。 - rzetterberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接