通过堆栈Docker集成运行emacs互操作模式

时间:2018-08-07 11:19:05

标签: haskell emacs haskell-stack intero

我正在尝试在启用了docker集成的堆栈项目中使用intero模式。因此,它的stack.yml包含:

docker:
  enable: true
  image: my-project/build:lts-11.9

尽管如此,当我在项目中打开任何.hs文件时,intero-mode也会尝试安装intero可执行文件并失败。在消息缓冲区中,它报告:

Installed successfully! Starting Intero in a moment ...
Booting up intero ...
Problem with Intero!
Reading Haskell configuration failed with exit code 1 and output:
get-cabal-configuration.hs: /home/jesuspc/.nix-profile/bin/hpack: createProcess: runInteractiveProcess: exec: does not exist (No such file or directory)

然后我得到了Intero模式的错误屏幕:

...
The process ended. Here is the reason that Emacs gives us:

exited abnormally with code 1

For troubleshooting purposes, here are the arguments used to launch intero:

stack ghci --with-ghc /home/jesuspc/.stack/compiler-tools/x86_64-linux-dke094d5208e8a802cb369cecdad3049ae/ghc-8.2.2/bin/intero "--docker-run-args=--interactive=true --tty=false" --no-build --no-load --ghci-options -ignore-dot-ghci my-project
...

运行该行时,我得到:

Did not find executable at specified path: /home/jesuspc/.stack/compiler-tools/x86_64-linux-dke094d5208e8a802cb369cecdad3049ae/ghc-8.2.2/bin/intero

可能与nix有关,因为我发现通过运行它可以发现这一点:

stack ghci --with-ghc /home/jesuspc/.stack/compiler-tools/x86_64-linux-nix/ghc-8.2.2/bin/intero "--docker-run-args=--interactive=true --tty=false" --no-build --no-load --ghci-options -ignore-dot-ghci my-project

我遇到了另一个错误:

/home/jesuspc/.stack/compiler-tools/x86_64-linux-nix/ghc-8.2.2/bin/intero: createProcess: runInteractiveProcess: exec: does not exist (No such file or directory)

我相信可能会引发此错误,因为我的项目使用外部库,但找不到它们,但这只是一个猜测。

intero-mode是否还知道stack-docker集成?似乎正在尝试在我的本地计算机上使用intero可执行文件,而不是使用其中存在所有必需库的docker上下文。我该如何解决?

1 个答案:

答案 0 :(得分:2)

我昨天也刚遇到这个问题。看来问题出在函数intero-copy-compiler-tool-auto-install中 不会考虑您的stack.yaml文件,因此不会将intero构建到docker容器中。我发现要进行超级骇客的工作是

stack --docker build --copy-compiler-tool intero

在您的项目中。