Проблемы с Guice и Play, а также с циклом обновления Play
При запуске приложения как stage/dist у меня были очень странные ошибки в Play. Guice не говорит о себе ничего, кроме действительно бессмысленных ошибок.
Что я делаю?
Плачь часами, ищи в Интернете, плачь еще. Смотри, смотри, смотри — наконец-то придумали решение!
Объяснять это нетрудно, но, по сути, Guice загружает что-то, когда хочет, а соединение с базой данных, которое у нас есть через CharityRepository, постоянно говорит мне, что моего EbeanServer там нет.
Сервер Ebean является Singleton, поэтому это означает, что он не загрузился при загрузке CharityRepository.
В CharityRepository.java вы можете увидеть эту строку.
Это происходит из-за причудливого порядка с тем, как создаются экземпляры классов. Если класс репозитория создан до экземпляра EbeanDynamicEvolutions, а сервер Ebean не существует, метод getServer() попытается создать сервер без какой-либо конфигурации, что впоследствии завершится ошибкой.
Обновление Play
Единственное, что отстойно в Play, — это обратная совместимость, но одна из главных вещей, которые мне нравятся, — это отказ от старых концепций «не держать в плену» — новые версии чисты как свисток.
Когда вы обновляетесь, вы обновляетесь. Вы, кодер, должны справиться с этим. Так что примите это и держите вещи маленькими и проверенными.
В Wowcher нам пришлось столкнуться с переходом от Scala Promises к CompletionStages. Для этого требовалось 2 человека в неделю. Это дорого для . выпуск каркаса.
Сейчас я оглядываюсь назад и думаю, да, это было, но это был правильный ход. Вся философия прерывания циклов обновления позволяет всем использовать новейшие функции. Если вы убедитесь, что ваши команды разработчиков работают над этим циклом обновления, все в порядке. Если нет, это может сильно ударить по вам.
Использование Grunt
Многие люди скажут вам, что они используют Gulp вместо Grunt или напрямую используют NPM. Для этого проекта я выбрал Grunt — его несложно настроить, и я сделал некоторую конфигурацию из некоторых частей, которые лежали в других репозиториях.
Папки Sass, JS и Image публикуются в общей папке приложения Play и соответствующим образом сжимаются.
Некоторые файлы оставлены для простоты отладки, например неминифицированные версии JS и CSS в общедоступных папках.
Чтобы скомпилировать и отслеживать изменения в приложении, из внешней папки используйте:
grunt && grunt watch