Шекспир-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
версия, я не пробовал.)