4

単純なYesodアプリケーションをHerokucabalにデプロイすると、shakespeare-js-1.0.2をインストールすると失敗します

Building shakespeare-js-1.0.2...
Building persistent-1.0.2.2...
Building yaml-0.8.2.1...
Building tls-extra-0.6.1...
Failed to install shakespeare-js-1.0.2
Last 10 lines of the build log ( /app//.cabal/logs/shakespeare-js-1.0.2.log ):
Building shakespeare-js-1.0.2...
Preprocessing library shakespeare-js-1.0.2...
[1 of 3] Compiling Text.Julius ( Text/Julius.hs, dist/build/Text/Julius.o )
[2 of 3] Compiling Text.Coffee ( Text/Coffee.hs, dist/build/Text/Coffee.o )
Text/Coffee.hs:56:7:
`preEscapeBegin' is not a (visible) field of constructor `PreConvert'
Text/Coffee.hs:57:7:
`preEscapeEnd' is not a (visible) field of constructor `PreConvert'

このプロジェクトは、WAIとWarpを使用してHelloWorldを印刷するシンプルなWebサイトです。私のcabalファイルでは、最新バージョンのyesod(1.1.9)のみを指定して、Herokuで使用可能かどうかを確認しています(Yesodまたはshakespeare-jsはまだ使用されていません)。

executable Website
  extensions:NoImplicitPrelude
             TemplateHaskell
             QuasiQuotes
             OverloadedStrings
             CPP
             MultiParamTypeClasses
             TypeFamilies
             GADTs
             GeneralizedNewtypeDeriving
             FlexibleContexts
             EmptyDataDecls
             NoMonomorphismRestriction



  main-is:             source/Main.hs
  -- other-modules:       
  build-depends:       base          == 4.5.*
                     , http-types   
                     , template-haskell 
                     , wai           
                     , wai-extra     
                     , warp          
                     , yesod         == 1.1.9

このプロジェクトは、同様のスタックを使用してVM上でローカルにビルドおよび実行されます。これには、shakespeare-js-1.0.2が含まれます。

私は次のことを試しました:

  • .cabalファイルで1.0.2以外の新しいバージョンまたは古いバージョンのshakespeare-jsを強制します。同じコンパイルエラーが表示されます。
  • 暗闇の中でのショットとして、TemplateHaskellなどのコンパイルに影響を与える可能性のあるいくつかの拡張機能を.cabalファイルから削除してみました。

編集:

  • shakespeare-js <1.0.2を使用すると、herokuが1.0.1を選択した後、コンパイルエラーが発生します。これもコンパイルに失敗します。
  • shakespeare-js-1.1.2(最新バージョン)をどこでも、ローカルでもコンパイルできません。

シェイクスピア<1.0.3を強制することでエラーを解決しました。これでは、シェイクスピアの最新バージョン(yesod)をコンパイルできないという問題は解決されません。

4

1 に答える 1

2

問題は、タイプがとPreConvertの間shakespeare-1.0.2で変更されたことshakespeare-1.0.3です。

以前のバージョンでpreEscapeBeginpreEscapeEnd、コンストラクターのフィールドでしたがPreConvert、バージョン1.0.3で削除されました。

したがって、解決策は

  • 古いバージョンのを使用しshakespeare、指定するshakespeare < 1.0.3か、
  • の新しい十分なバージョンを使用しshakespeare-js、を指定しますshakespeare-js >= 1.1.2

shakespeare(新しいバージョンを使用する場合は、さらに調整が必要になる可能性があります。私は試していません。)

于 2013-02-23T19:12:13.350 に答える