Недавно наша компания приобрела лицензию на библиотеку EurekaLog (далее – EL). Что это такое, наверное Вы уже знаете, а если не знаете – то самое время поинтересоваться этим…
Этот пост я решил написать, чтобы обозначить проблемы, с которыми я столкнулся, при внедрении библиотеки. И в первую очередь адресую его GunSmoker’у.
Немного лирики. Я работаю с небольшой группой разработчиков над одним Проектом. Этот проект состоит из разных частей, грубо можно выявить такие категории:
- база данных (на Oracle) и всё что с ней связано;
- серверные скрипты и утилиты, работающие на стороне БД;
- клиентские приложения (Delphi).
И вот клиентских приложений у нас аж девять штук. Для поддержания жизнедеятельности этих приложений у нас:
- все исходники хранятся в SVN;
- сборка приложений для тестирования и отладки может происходить на компьютерах разработчиков, но:
- есть сервер сборки, который по определённым правилам запускает определённые скрипты и собирает приложения и выкладывает их на фтп.
Итак, задача, которую я себе поставил, состояла в следующем:
- Разместить исходники библиотеки EL в SVN.
- Настроить makefile таким образом, чтобы сервер сборки приложений мог собирать приложения с EL без установки EL родной инсталляшкой.
- Настроить проекты (напомню, их много), чтобы все они компилировались с одинаковыми настройками EL.
Первое, что мне не понравилось, так это то, что на сайте для скачивания доступна лишь инсталляшка, которая при установке лишь спрашивает конечный каталог для сохранения всех файлов. Я был немного удивлён, что нет отдельного архива с исходниками. Ну ладно, мелочь, установил. Скопировал все установленные исходники в отдельный каталог и деинсталлировал. Разобрался как, установить EL ручками. Нужно мне это для того, чтобы программисты наши могли просто обновившись из SVN продолжить работу, а не скачивать отдельно дистрибутив и ещё устанавливать его.
Дальше – лучше. EL умная библиотека, и при активации самой себя в настройках delphi-проекта правит главный файл проекта (.dpr для Delphi7), добавляя себя в uses. Это с одной стороны очень удобно. Более того, EL умеет добавлять себя в uses не в самое начало, а после FastMM4, например. Это очень даже здорово. Только есть одно но. Напомню, что у нас проектов много. И мы используем набор библиотек, типа FastMM4, VCLFixPack и т.п. И чтобы при включении/исключении подобных библиотек не править каждый dpr-файл, у нас выделен отдельный модуль… назовём его ProjectAddons.pas. Этот модуль есть во всех проектах и стоит на первом месте. И именно в uses ProjectAddons.pas я планировал включить модуль ExceptionLog. Ну ладно, исходники есть (я всегда при покупке библиотек выбираю версию с исходниками), отключить автодобавление – дело техники. Правда это уже не красиво, лезть в исходник сторонней библиотеки…
Ещё раз я столкнулся с автодобавлением в uses уже при запуске скрипта сборки приложений вне IDE Delphi. Но тут тоже дело техники, достаточно перекомпилировать ecc32.exe.
Третий момент. Настройки EL сохраняются вместе с настройками проекта (в cfg-файл для Delphi7 и ранее). Это вполне логичное решение. Для сборки приложения вне IDE (используя ecc32), есть возможность указания отдельного файла с настройками, что тоже вполне оправдано. В итоге, достаточно настроить EL один раз, сохранить настройки в отдельный файл, и сервер сборки будет выкладывать файлы проектов с одинаковыми настройками. Однако на компьютерах разработчиков, при компиляции приложений из IDE, настройки подхватываются не оттуда. Опять же, проблема синхронизации – надо отслеживать девять (по числу приложений) файлов настроек. Именно этот момент я хочу предложить разработчикам EurekaLog реализовать по другому, а именно: в cfg-файле проекта хранить не все настройки EL, а только лишь ссылку на файл с настройками EL.
Ну и последний момент, который вынудил меня внести ещё две маленькие правки в исходный текст библиотеки. У нас для регистрации проблем и ошибок используется система баг-треккинга mantis. Поэтому EL я настроил так, чтобы отчёт об ошибках отсылался в mantis. И вот тут небольшая несуразица. В терминологии мантиса – у нас один Проект, просто приложений несколько. Когда пользователи добавляют вопросы в Проект, они указывают (при необходимости) приложение в отдельное поле. И вот настроить EL так, чтобы при создании вопроса в мантисе можно было указать приложение – оказалось не возможным, по причине того, что приложения в мантисе выбираются из выпадающего списка, а названия в этом списке не совсем совпадают с названиями приложений. Простое решение, которое пришло в голову – это скорректировать заголовок создаваемого вопроса. Т.е. вместо “[v<версия приложения> – <кол-во>]” я сделал так, чтобы подставлялось “[<название приложения> v<версия приложения> – <кол-во>]”. Жалко, что для этого нет отдельной настройки в EL.
В общем, потратил я на всё это дело какое-то время. Плюс повозился с тонкой настройкой обработки конкретных исключений. Пришлось ещё раз проявить хитрость, из-за особенности использования некоторых потоков, которые запускаются по WaitFor, и дублируют Exception, который не обработался потоком…
P.S.: Несмотря на некоторые трудности, с которыми я столкнулся при внедрении EurekaLog, на сегодня, наверное, нет лучшего помощника для отлавливания ошибок. Must Have.
6 коммент.:
Николай, в EurekaLog есть событие CustomWebFieldsRequest - в нём можно сформировать все дополнительные поля, которые нужно отправить в Mantis.
Да, есть (спасибо, я раздел справки с описанием событий изучил). Но я, написав так:
"приложения в мантисе выбираются из выпадающего списка, а названия в этом списке не совсем совпадают с названиями приложений", имел ввиду следующее: это поле в нашем мантисе заведено, во-первых, числовым (подставляется ссылка на справочник приложений), во-вторых, сам справочник приложений заведён криво. А в третьих, т.к. у нас несколько Проектов (не приложений для Проекта о котором я писал), то это доп. поле не выведено в сводку вопросов, т.е. чтобы увидеть приложение, всё равно надо открывать вопрос. Это, конечно, мелочи, но когда с ними работаешь каждый день...
>Первое, что мне не понравилось, так это то, что на сайте для скачивания доступна лишь инсталляшка, которая при установке лишь спрашивает конечный каталог для сохранения всех файлов. Я был немного удивлён, что нет отдельного архива с исходниками.
Мне тоже не нравится, когда нельзя просто скачать исходники. Очень многие библиотеки грешат этим.
И тоже обычно сначала устанавливаю такие дистрибутивы, в какую-нибудь левую папку, потом копирую содержимое этой папки и делаю uninstall. Особенно неприятно, когда при деинсталле такие библиотеки оставляют за собой какие-нибудь скомпилированные файлы, в пути добавленном в Library Path.
Впрочем, с теми либами, с которыми работаешь постоянно уже свыкаешься с таким поведением.
Николай, если не секрет, что представляет собой ваш сервер сборки?
Да ничего особенного он из себя не представляет. Просто сервер (виндовый), на котором по заданию запускается bat-скрипт, который проверяет, надо ли делать сборку конкретного приложения (сравниваются ревизии из SVN) и если надо - запускается другой bat-скрипт, который работает с упомянутым в заметке makefile.
а как отправлять сообщения из EurekaLog на GitHub ?
Отправить комментарий