【问题标题】:Haskell Stack does not build postgresql-libpq on NixosHaskell Stack 不在 Nixos 上构建 postgresql-libpq
【发布时间】:2017-01-28 22:58:33
【问题描述】:

postgresql-libpq 添加到我的项目的 cabal 文件后,stack build 失败并显示以下内容:

Configuring postgresql-libpq-0.9.1.1...
setup: The program 'pg_config' is required but it could not be found.

我在 Nixos 上,pg_config 已安装并在我的 PATH 上:

$ whereis pg_config
pg_config: /nix/store/5bc6hzqkyw8dpi91sqznd3ik42mllwyz-system-path/bin/pg_config

我正在使用堆栈 1.0.2,并且似乎在不稳定通道上 nixos-rebuild switch --upgrade 之后它也不会更新。这是我的错误还是其他原因?

【问题讨论】:

  • 我不熟悉 Stack+Nix 集成,但 stack exec whereis pg_config 是否找到 pg_config 位置?
  • @MichaelSnoyman 我得到“路径上找不到名为 whereis 的可执行文件”.. 打印的路径目录不包含我的系统路径,大多数程序都可以在其中找到(包括 whereispg_config)。
  • 听起来你已经在配置中启用了 nix,但没有指定必要的包。我不是 nix 用户,因此无法提供进一步建议,但 this documentation 似乎涵盖了该主题。
  • 我已经尝试将一些包添加到 nix 部分并取得了成功,但是使用 PATH 中的东西对可重现的构建没有帮助当然是有道理的。我将在适当的渠道中进一步调查。感谢您的关注。

标签: haskell haskell-stack nixos


【解决方案1】:

我遇到了同样的问题,阅读 Michael Snoyman 链接的 docs 对我有帮助。您需要将其添加到您的 stack.yaml:

nix:
  enable: true
  pure: false

我正在构建不属于我的包,因此我没有编辑项目特定的配置,而是将这些行添加到我的 global 配置中:~/.stack/config.yaml。或者,您可以使用命令行选项:

stack --nix --no-nix-pure build

作为“非纯”构建的替代方案,您应该能够在 nix-shell 中指定所有系统依赖项以强制重现性,但我没有尝试。

【讨论】:

  • 这很奇怪.. 设置 pure: false 根本没有帮助我.. 最后我把 postgresql 放在包列表中让它工作..
  • @MarceloZabani 我遇到了与这个问题类似的问题。您在哪个软件包列表中添加了“postgresql”以使其正常工作?
  • @mherzl 很抱歉没有早点回答。不过,我想你已经知道在哪里了!
  • 不用担心@MarceloZabani。是的,它按照答案中的描述工作!
  • pure: false 非常重要,如果您构建的应用程序需要访问环境。在我的情况下,使用默认堆栈pure: true 构建的应用程序无法访问fdo-notify 所需的环境变量 DBUS_SESSION_BUS_ADDRESS。相反,它与cabal build 一起工作得很好。 TR;DL:pure: false 让我再次使用stack。非常感谢您的提示;-)
【解决方案2】:

我在 nixos 上的堆栈遇到了这个问题,当我的 stack.yaml 的 nix 块更改为以下内容时,我解决了这个问题。

nix:
  pure: true
  enable: true
  packages: [ postgresql ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2019-08-03
    • 2021-02-26
    • 2015-05-16
    • 2020-02-08
    • 2016-03-31
    • 2017-05-22
    相关资源
    最近更新 更多