Девятая часть серии

Проблемы с 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

Вернуться к индексу