haskell – 莎士比亚-js无法在Heroku上编译

在安装shakespeare-js-1.0.2时,将我的简单Yesod应用程序部署到Heroku cabal时失败

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打印一个hello world.
在我的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.出现相同的编译错误.
>作为黑暗中的镜头,我尝试从.cabal文件中删除一些可能影响编译的扩展,例如TemplateHaskell.

编辑:

>当我使用莎士比亚-js< 1.0.2在heroku选择1.0.1后,我得到一个编译错误,但也无法编译.
>我无法在任何地方编译shakespeare-js-1.1.2(最新版本),甚至不能在本地编译.

我通过强迫莎士比亚 这并没有解决无法编译最新版本的莎士比亚(yesod)的问题.

最佳答案 问题是PreConvert类型在
shakespeare-1.0.2
shakespeare-1.0.3之间发生了变化.

在旧版本中,preEscapeBegin和preEscapeEnd是构造函数PreConvert的字段,但它们已在1.0.3版中删除.

所以解决方案是

>使用旧版莎士比亚,指定莎士比亚< 1.0.3或
>使用足够新版本的shakespeare-js,指定shakespeare-js> = 1.1.2.

(如果您使用较新的莎士比亚版本,可能需要进一步调整,我还没试过.)

点赞