Шекспир-JS не может скомпилировать на Heroku

При развертывании моего простого приложения Yesod в Heroku cabal происходит сбой при установке 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 для печати приветового мира. В моем файле 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

Этот проект собирается и запускается локально на моей виртуальной машине с аналогичным стеком, включая shakespeare-js-1.0.2.

Я попробовал следующее:

  • Принудительное использование более новой или более старой версии shakespeare-js, отличной от 1.0.2, в файле.cabal. Появляется та же ошибка компиляции.
  • Как выстрел в темноте, я попытался удалить некоторые расширения, которые могут повлиять на компиляцию, такие как TemplateHaskell из файла.cabal.

Редактировать:

  • Когда я использую shakespeare-js < 1.0.2, я получаю ошибку компиляции после того, как heroku выбирает 1.0.1, которая также не в состоянии компилироваться.
  • Я не могу заставить shakespeare-js-1.1.2 (самую последнюю версию) скомпилировать нигде, даже локально.

Я решил ошибку, заставив Шекспира< 1.0.3. Это не решает проблему невозможности скомпилировать самые последние версии Шекспира (yesod).

1 ответ

Решение

Проблема в том, что тип PreConvert изменился между shakespeare-1.0.2 а также shakespeare-1.0.3,

В старой версии preEscapeBegin а также preEscapeEnd были поля конструктора PreConvert, но они были удалены в версии 1.0.3.

Таким образом, решение заключается в

  • использовать старую версию shakespeare, уточнить shakespeare < 1.0.3 или же
  • использовать достаточно новую версию shakespeare-js, уточнить shakespeare-js >= 1.1.2,

(Могут потребоваться дополнительные корректировки, если вы используете более новый shakespeare версия, я не пробовал.)

Другие вопросы по тегам