Запуск Grails 3 на Heroku

Я пытаюсь развернуть самое простое приложение Grails 3 на Heroku, но безуспешно.

В документе Heroku содержится информация только о развертывании Grails 2< /сильный> приложение. Поэтому я следил за этой статьей в блоге, в которой объясняется как развернуть приложение Grails 3. Но это приводит к следующему исключению:

2015-06-09T21:03:41.637499+00:00 app[web.1]:   .   ____          _            __ _ _
2015-06-09T21:03:41.637570+00:00 app[web.1]: ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2015-06-09T21:03:41.637651+00:00 app[web.1]:   '  |____| .__|_| |_|_| |_\__, | / / / /
2015-06-09T21:03:41.637612+00:00 app[web.1]:  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
2015-06-09T21:03:41.637693+00:00 app[web.1]:  =========|_|==============|___/=/_/_/_/
2015-06-09T21:03:41.641123+00:00 app[web.1]: 
2015-06-09T21:03:41.641085+00:00 app[web.1]:  :: Spring Boot ::        (v1.2.3.RELEASE)
2015-06-09T21:04:03.066389+00:00 app[web.1]: ERROR org.apache.catalina.core.ContainerBase - A child container failed during start
2015-06-09T21:04:03.066397+00:00 app[web.1]: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
2015-06-09T21:04:03.066399+00:00 app[web.1]:    at java.util.concurrent.FutureTask.report(FutureTask.java:122) [na:1.8.0_40-'cedar14']
2015-06-09T21:04:03.066401+00:00 app[web.1]:    at java.util.concurrent.FutureTask.get(FutureTask.java:192) [na:1.8.0_40-'cedar14']
2015-06-09T21:04:03.066403+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) ~[webapp-runner.jar:na]
2015-06-09T21:04:03.066404+00:00 app[web.1]:    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800) [webapp-runner.jar:na]
2015-06-09T21:04:03.066406+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [webapp-runner.jar:na]
2015-06-09T21:04:03.066408+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) [webapp-runner.jar:na]
2015-06-09T21:04:03.066409+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) [webapp-runner.jar:na]
2015-06-09T21:04:03.066411+00:00 app[web.1]:    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_40-'cedar14']
2015-06-09T21:04:03.066413+00:00 app[web.1]:    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_40-'cedar14']
2015-06-09T21:04:03.066414+00:00 app[web.1]:    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_40-'cedar14']
2015-06-09T21:04:03.066417+00:00 app[web.1]:    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40-'cedar14']
2015-06-09T21:04:03.066419+00:00 app[web.1]: Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
2015-06-09T21:04:03.066420+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) [webapp-runner.jar:na]
2015-06-09T21:04:03.066422+00:00 app[web.1]:    ... 6 common frames omitted
2015-06-09T21:04:03.066424+00:00 app[web.1]: Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
2015-06-09T21:04:03.066425+00:00 app[web.1]:    at org.apache.tomcat.websocket.server.WsServerContainer.<init>(WsServerContainer.java:147) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20]
2015-06-09T21:04:03.066427+00:00 app[web.1]:    at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20]
2015-06-09T21:04:03.066429+00:00 app[web.1]:    at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20]
2015-06-09T21:04:03.066431+00:00 app[web.1]:    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5274) ~[webapp-runner.jar:na]
2015-06-09T21:04:03.066432+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [webapp-runner.jar:na]
2015-06-09T21:04:03.066434+00:00 app[web.1]:    ... 6 common frames omitted

Удалось ли кому-нибудь развернуть приложение Grails 3 на Heroku? Пошаговый метод был бы бесценным.


person Stéphane Bruckert    schedule 09.06.2015    source источник


Ответы (2)


  1. Похоже, у вас есть зависимость, которая хочет использовать веб-сокеты. Для зависимости требуется встроенная библиотека веб-сокетов tomcat 8. JAR для запуска веб-приложений, загруженный в блоге, - это tomcat 7, возможно, попробуйте загрузить выпуск M1 для 8.0.18.

http://search.maven.org/#artifactdetails%7Ccom.github.jsimone%7Cwebapp-runner%7C8.0.18.0-M1%7Cjar


  1. Глобальное свойство dataSource приводит к сбою загрузки драйвера Postgres. Удалите следующие строки в grails-app/conf/application.yml:

    -dataSource:
    -    pooled: true
    -    jmxExport: true
    -    driverClassName: org.h2.Driver
    -    username: sa
    -    password:
    

PR: https://github.com/davydotcom/grails3-on-heroku/commit/8593e846efbd79804d9013db1b8b8f0e73cf9629

person davydotcom    schedule 09.06.2015
comment
Я пробовал это, но все равно то же самое. Я не делаю ничего отличного от статьи в блоге. Вот мой репозиторий к проекту: github.com/stephanebruckert/grails3-on-heroku. Также я не сказал, что время ожидания всех запросов истекло. Может ли это быть связано с stackoverflow. ком/вопросы/16151527/? - person Stéphane Bruckert; 10.06.2015
comment
Итак, 1 не сработало, но 2 решило всю проблему! Спасибо. Теперь github.com/stephanebruckert/grails3-on-heroku — это проект Grails 3, который работает с Героку. - person Stéphane Bruckert; 10.06.2015

Хотя я не эксперт по Grails, мне это кажется конфликтом версий jar API сервлета. Метод ServletContext.getVirtualServerName доступен только с API сервлета 3.1, но похоже, что более старая версия этого jar-файла находится в пути к классам и скрывает ту, которая, вероятно, предоставлена ​​Tomcat. Попробуйте либо удалить явную ссылку на servlet-api.jar из пути к классам, либо установить его область действия на «предоставленную» (если применимо).

person Remigius Stalder    schedule 09.06.2015