2

Travis-CI を使用して Hakyll サイトを構築しようとしています。しかし、そこまでたどり着く前に、Hakyll を依存関係としてインストールしようとすると、依存関係エラーが発生します。

問題なく自分のマシンでローカルに Hakyll をビルドできます。依存関係エラーの原因は何ですか?また、どのように解決できますか? 各依存バージョンを実際にハードコーディングせずに解決する方法はありますか?

TravisCI からの出力は次のとおりです。

travis_fold:end:git.5
$ export PATH=/usr/local/ghc/$(ghc_find 7.6)/bin/:$PATH
travis_fold:start:cabal
$ cabal update
Config file path source is default config file.
Config file /home/travis/.cabal/config not found.
Writing default configuration to /home/travis/.cabal/config
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
travis_fold:end:cabal
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.6.3
$ cabal --version
cabal-install version 1.18.0.2
using version 1.18.1 of the Cabal library 
travis_fold:start:before_install.1
$ cabal update
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
travis_fold:end:before_install.1
travis_fold:start:before_install.2
$ cabal install hakyll pandoc
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: hakyll-4.5.3.0 (user goal)
trying: base-4.6.0.1/installed-8aa... (dependency of hakyll-4.5.3.0)
trying: hakyll-4.5.3.0:+checkexternal
trying: http-conduit-2.1.2.3 (dependency of hakyll-4.5.3.0:+checkexternal)
trying: http-client-0.3.3.2 (dependency of http-conduit-2.1.2.3)
trying: exceptions-0.6.1 (dependency of http-client-0.3.3.2)
trying: transformers-0.4.1.0 (dependency of http-conduit-2.1.2.3)
next goal: mtl (dependency of hakyll-4.5.3.0)
rejecting: mtl-2.2.1, 2.2.0.1, 2.2 (conflict: hakyll => mtl>=1 && <2.2)
rejecting: mtl-2.1.3.1, 2.1.2 (conflict: transformers==0.4.1.0, mtl =>
transformers==0.3.*)
rejecting: mtl-2.1.1, 2.1 (conflict: base==4.6.0.1/installed-8aa..., mtl =>
base<4.6)
rejecting: mtl-2.0.1.1 (conflict: transformers==0.4.1.0, mtl =>
transformers==0.2.*)
rejecting: mtl-2.0.1.0, 2.0.0.0 (conflict: base==4.6.0.1/installed-8aa..., mtl
=> base<4.6)
rejecting: mtl-1.1.1.1, 1.1.1.0, 1.1.0.2, 1.1.0.1, 1.1.0.0, 1.0 (conflict:
exceptions => mtl>=2.0 && <2.3)
Backjump limit reached (change with --max-backjumps).

[31;1mThe command "cabal install hakyll pandoc" failed and exited with 1 during .[0m

Your build has been stopped.

他に有用な出力がある場合はお知らせください。提供できます。

4

1 に答える 1

5

Backjump limit reachedcabal-install から取得した場合に最初に試すことは--max-backjumps=-1、「徹底的に検索する」ことを意味するオプションを使用して再試行することですが、その後数十分かかる場合は、中断するか、Travis-CI に頼る必要があります。タイムアウト。大規模で限定的な検索には、-1 ではなく 500 または 1000 を使用することもできます。デフォルトは 200 です。

それがうまくいかない場合は、特定のプロジェクトをオプションで特定のバージョンに制約するように選択してみてください--constraint 'foo==0.1.0.0.

この特定のケースでは、次の 2 行は、hakyllそれ自体が問題の根本にあったことを示唆しています。

rejecting: mtl-2.2.1, 2.2.0.1, 2.2 (conflict: hakyll => mtl>=1 && <2.2)
rejecting: mtl-2.1.1, 2.1 (conflict: base==4.6.0.1/installed..., mtl => base<4.6)

言い換えるとbase、GHC バージョンに関連付けられている が必要なようですmtl>=2.2(またはそれよりも少ないかもしれませんが2.1、それも機能しなかったと思われます)。hakyllは を必要としていたため、 のこのバージョンでは のこのバージョンが動作しないmtl<2.2ことを意味する根本的な矛盾があるように思われました。hakyllbase

于 2014-07-02T21:41:58.683 に答える