![]() |
#1 |
Участник
|
AX2012: Как CIL может работать в PROD, если есть ошибки компиляции?
Есть клиент с Ax2012 R3
У них крутится аксапта в продакшн 3 года уже, и ее не трогают. Начались проблемы с перформансом. Дали мне PrePROD. Там попыталась запустить одну функциональность в батч ,и выдалась .net ошибка ( в интеррактиве нет) microsoft. dynamics.ax.xpp.errorException was thrown.. Function XXX incorrectly called. Запустила создание CIL, и комп упал с сообщением "недостаточно памяти". Запустила просто компиляцию, чтобы посмотреть, что происходит c environnement. Она выдала 14 ошибок. Из которых 5 - ссылка на Dll , которой нет в и 9 - связаны с привидегиями и duty . которые сслыдаются на таблицы и меню айтемы, которых в AOT нет. Преимущественно retail и какие-то кастомные разработки. Клиент говорит,что PrePROD несколько месяцев назад восстанавливали из PROD (данные и modelstore) Проверила в PROD , там тоже этих объектов нет! 1) Как так возможно, что объектов нет, но батчи работают в PROD? То есть, в какой-то момент CIl был сгенерирован же , когда приложение в PROD последний раз устанавливали. И потом никто приложение не трогал. Возможно ли, что объекты Security были созданы как-то иначе(скриптом)? Или возможно ли установить патч layer без перегенерации CIL? 2) Если восстановим сейчас копию базы в PrePROD (то есть, modelstore тоже), то все равно на PrePROD нужно будет перегенерировать CIL ? Или можно избежать этого? Мне на данный момент , чтобы время сэкономить, нужно только , чтобы бытчи работали, чтобы мне с основной performance проблемой быстро работать . Разбираться с ошибками компиляции (пропавшими объектами) потом будем. Спасибо за помощь Последний раз редактировалось kitty; 07.04.2025 в 11:06. |
|
![]() |
#2 |
Участник
|
Ну, в общем-то такое не редкость.
Были какие-то объекты (классы, менюитемы, таблички). Были security сущности которые на них ссылались. Объекты удалили или переименовали. Security смотрят в никуда теперь и поэтому при компиляции выдают ошибки. Это не катастрофа. Сборке CIL не мешает. Это же не пакеты а какие-то другие объекты. CIL может собираться успешно даже по приложению которое скомпилировано с ошибками. Там просто в CIL будет вкомпилирован выброс исключения и все. |
|
|
За это сообщение автора поблагодарили: kitty (1). |
![]() |
#3 |
Участник
|
Ого! Спасибо! Век живи - век учись. Всегда корректировали по умолчанию все ошибки на проектах, тк считалось, что иначе CIL не генерировался.
Если на то пошло, то какие ошибки тогда мешают а, какие - нет? Что значит "будет вкомпилирован выброс искоючения" ? |
|
![]() |
#4 |
Участник
|
Цитата:
Цитата:
X++: throw error('Блабла сообщение об ошибке'); Также по логике не должны мешать ошибки в джобах и формах, так как они не влияют на CIL. Но я не проверял. |
|
![]() |
#5 |
Участник
|
Спасибо огромное!
|
|
![]() |
#6 |
Участник
|
Если все работает в PROD и копию базы(то есть, включая modelstore) восстановить в PrePROD, то обязательно ли снова гегерить CIL? Или можно скопировать XppIL.dll и обойтись без повторной компиляции + генерации CIL? (впевдо-код все равно в model store уже есть, то есть, компилировать не обязательно, думаю. А вот с dll не очень понимаю. Наверное, зависит от машины, на которой генеришь) Таким образом можно сэкономить несколько часов и иметь гарантированно рабочее приложение, как в PROD
|
|
![]() |
#7 |
Administrator
|
Цитата:
Сообщение от kitty
![]() Если все работает в PROD и копию базы(то есть, включая modelstore) восстановить в PrePROD, то обязательно ли снова гегерить CIL? Или можно скопировать XppIL.dll и обойтись без повторной компиляции + генерации CIL? (впевдо-код все равно в model store уже есть, то есть, компилировать не обязательно, думаю. А вот с dll не очень понимаю. Наверное, зависит от машины, на которой генеришь) Таким образом можно сэкономить несколько часов и иметь гарантированно рабочее приложение, как в PROD
Т.е. теоретически, если восстановить БД модели и заменить папку XppIL на всех АОСах PrePROD-а, то должно сработать. Но я не проверял, потому что при копировании приложения (через бекап / восстановление БД модели) я просто собираю полный CIL на целевом приложении (в данном случае PrePROD). Это занимает минут 20-30. Тут достаточно спорный вопрос - что быстрее копировать папку XppIL или собрать полный CIL при условии, что копируется еще подпапка source c более, чем 300 тыс файлов. Без нее конечно быстрее, но у нас обычно PrePROD еще иногда может использоваться для отладки, а значит эта папка 100% нужна В то же время, зашив в Powershell-скрипт все шаги по копированию БД, сборки CIL, перенастройки SSRS-отчетов и прочих интеграций - можно добиться достаточно быстрого копирования. Собственно - без учета времени копирования основной БД или синхронизации (если брать только модель) - то в сумме вся процедура занимает около 30-40 минут (5 минут тратится на первый старт АОСа после очистки таблички SysXppAssembly).
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#8 |
Участник
|
Я хотела точно не огрести проблем с CIL , тк надо срочно сделать багфикс. Поэтому по-максимому хотела избежать ошибкок кв нем, да и время на его генерацию не тратить.
Нашла старый док по этому клиенту , указано, что полная компиляция в продакшн 5 часов и Cil полчаса . В PrePROD тут дольше будет. Но, как я понимаю, можно только CIL обойтись, без полной компиляции, тк modelstore уже содержит откомпилированный код. Поэтому вопрос времени отпадает сам собой, вы правы. Ну час -два будет генериться. Это терпимо |
|
![]() |
#9 |
Участник
|
А вот обратный вопрос. Я сейчас сделаю фикс на PrePROD. Его патчем на PROD надо положить (на USR слой). Фикс - это изменение кода в методе класса. Может, еще существующем menu item сделаю runOn = Server. То есть, с ID никаких проблем не должно быть.
Можно ли такую процедуру успользовать,
Или нужно для такого патча также делать полный compile и генерировать полный CIL Последний раз редактировалось kitty; 11.04.2025 в 15:27. |
|
![]() |
#10 |
Administrator
|
Цитата:
Сообщение от kitty
![]() Я хотела точно не огрести проблем с CIL , тк надо срочно сделать багфикс. Поэтому по-максимому хотела избежать ошибкок кв нем, да и время на его генерацию не тратить.
Нашла старый док по этому клиенту , указано, что полная компиляция в продакшн 5 часов и Cil полчаса . В PrePROD тут дольше будет. Но, как я понимаю, можно только CIL обойтись, без полной компиляции, тк modelstore уже содержит откомпилированный код. Поэтому вопрос времени отпадает сам собой, вы правы. Ну час -два будет генериться. Это терпимо 1. Договариваемся между разработчиками, что перенос любых классов, имеющих наследников требует их инкрементной компиляции. Перенос имеется в виду через XPO на BUILD-приложение 2. Запускаю многопоточную компиляцию на BUILD-приложении. Это где-то 30 минут (если нет ошибок). Если есть ошибки - то может и до 1 часу доходить. Здесь я каждую ночь по шедулеру запускаю многопоточную компиляцию и сборку CIL. Да, если есть пресловутые 5 часов - то конечно можно и полную компиляцию запустить (хотя у знакомых коллег - полная компиляция из АОТ вообще всего часа 2 занимает - и это из-за старой версии SQL Server и старой версии Windows под нее) 3. Варианты: 1) Делаю выгрузку в modelStore и загружаю на PROD modelStore-файл 2) Делаю бекап-ресторе БД model и собираю CIL уже на PROD. Оба варианта по времени плюс-минус одинаковы, но второй вариант позволяет меньше простаивать PROD-у. Это условно 30 минут (по факту 20-30) 3) Разворачиваю SSRS-отчеты и выполняю синхронизацию (40-45 минут) 4) Разворачиваю AIF-порты (минут 5-10) Итого: 30 минут - компиляция BUILD 30 минут - накат кода + CIL (или накат modelstore) 50 минут - SSRS, синхронизация, AIF-порты Условно - 2 часа. При этом BUILD-приложение 1 раз в неделю компилируется из АОТ "на всякий случай"
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#11 |
Administrator
|
Цитата:
Сообщение от kitty
![]() А вот обратный вопрос. Я сейчас сделаю фикс на PrePROD. Его патчем на PROD надо положить (на USR слой). Фикс - это изменение кода в методе класса. Может, еще существующем menu item сделаю runOn = Server. То есть, с ID никаких проблем не должно тыть.
Можно такую процедуру успользовать:
__________________
Возможно сделать все. Вопрос времени |
|
Теги |
ax2012 r3 |
|
|