`cabal update`由于'内存不足'而失败

ecc*_*tup 13 haskell cabal haskell-platform

这是什么cabal update输出:

Downloading the latest package list from hackage.haskell.org
cabal: out of memory (requested 2097152 bytes)
Run Code Online (Sandbox Code Playgroud)

原因可能是内存不足.怎么样tail 00-index.cache

pkg: charade 0.1 b# 46384
pkg: charset 0.0 b# 46390
pkg: charset 0.1 b# 46393
pkg: charset 0.2.0 b# 46396
pkg: charset 0.2.1 b# 46399
pkg: charset 0.2.2 b# 46402
pkg: charset 0.2.3 b# 46405
pkg: charset 0.3 b# 46408
pkg: charset 0.3.0.1 b# 46412
Run Code Online (Sandbox Code Playgroud)

我可以00-index.tar.gz轻松下载并00-index.tar解开.但是,因为out of memory,我无法生成缓存文件!cabal能00-index.cache以廉价的方式在当地产生吗?

cabal --version

cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library
Run Code Online (Sandbox Code Playgroud)

sto*_*ont 18

我遇到了在AWS上运行微实例的类似问题(没有运行cabal更新,而是编译我自己的程序).我按照这个链接中的建议创建了一个交换空间,它就可以了.

从链接:

> dd if=/dev/zero of=/tmp/swap bs=1M count=1024
> mkswap /tmp/swap
> swapon /tmp/swap
Run Code Online (Sandbox Code Playgroud)

dd命令在/ tmp目录下创建一个名为"swap"的交换文件,大小为1024MB(1GB).

使用mkswap命令将此文件设置为交换文件.

使用swapon命令启用新创建的交换文件.

此链接 提供有关交换空间的更多信息.

  • 我只是在运行Ubuntu 14的DigitalOcean Droplet上盲目地运行这些命令(因为它刚刚旋转,我没有什么可失去的).有效!谢谢stormont! (2认同)

Dan*_*ner 1

你只要放在00-index.cache合适的地方,cabal-install就可以正常使用了。要找出将其放在哪里,请查看remote-repo-cacheremote-repo中的值~/.cabal/config;缓存应该放在以远程存储库的昵称命名的目录中remote-repo-cache。例如,这是我的一个片段config

remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive
remote-repo-cache: /home/dmwit/.cabal/packages
Run Code Online (Sandbox Code Playgroud)

我的缓存位于/home/dmwit/.cabal/packages/hackage.haskell.org/00-index.cache.