AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 07.04.2025, 10:06   #1  
kitty is offline
kitty
Участник
 
383 / 30 (2) +++
Join Date: 24.05.2005
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 проблемой быстро работать . Разбираться с ошибками компиляции (пропавшими объектами) потом будем.

Спасибо за помощь

Last edited by kitty; 07.04.2025 at 11:06.
Old 07.04.2025, 12:41   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Ну, в общем-то такое не редкость.
Были какие-то объекты (классы, менюитемы, таблички). Были security сущности которые на них ссылались. Объекты удалили или переименовали. Security смотрят в никуда теперь и поэтому при компиляции выдают ошибки. Это не катастрофа. Сборке CIL не мешает. Это же не пакеты а какие-то другие объекты.

CIL может собираться успешно даже по приложению которое скомпилировано с ошибками. Там просто в CIL будет вкомпилирован выброс исключения и все.
This post has been rated by: kitty (1).
Old 07.04.2025, 13:20   #3  
kitty is offline
kitty
Участник
 
383 / 30 (2) +++
Join Date: 24.05.2005
Ого! Спасибо! Век живи - век учись. Всегда корректировали по умолчанию все ошибки на проектах, тк считалось, что иначе CIL не генерировался.

Если на то пошло, то какие ошибки тогда мешают а, какие - нет?
Что значит "будет вкомпилирован выброс искоючения" ?
Old 07.04.2025, 15:47   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by kitty View Post
Ого! Спасибо! Век живи - век учись. Всегда корректировали по умолчанию все ошибки на проектах, тк считалось, что иначе CIL не генерировался.
Долгое время так и было. Но начиная с одной из версий сделали оптимизацию, так что если какой-то метод не компилируется, то ЦИЛ все равно собирается, но в код этого метода ставится выброс исключения. В R3 точно уже должно быть так.

Quote:
Originally Posted by kitty View Post
Если на то пошло, то какие ошибки тогда мешают а, какие - нет?
Что значит "будет вкомпилирован выброс искоючения" ?
Ну вместо кода соответствующего тому, что написано на X++ там будет стоять эквивалент
X++:
throw error('Блабла сообщение об ошибке');
Ну ошибки в правах доступа не мешают, так как сборка CIL не использует эти объекты.
Также по логике не должны мешать ошибки в джобах и формах, так как они не влияют на CIL. Но я не проверял.
Old 08.04.2025, 09:34   #5  
kitty is offline
kitty
Участник
 
383 / 30 (2) +++
Join Date: 24.05.2005
Спасибо огромное!
Old 09.04.2025, 23:43   #6  
kitty is offline
kitty
Участник
 
383 / 30 (2) +++
Join Date: 24.05.2005
Если все работает в PROD и копию базы(то есть, включая modelstore) восстановить в PrePROD, то обязательно ли снова гегерить CIL? Или можно скопировать XppIL.dll и обойтись без повторной компиляции + генерации CIL? (впевдо-код все равно в model store уже есть, то есть, компилировать не обязательно, думаю. А вот с dll не очень понимаю. Наверное, зависит от машины, на которой генеришь) Таким образом можно сэкономить несколько часов и иметь гарантированно рабочее приложение, как в PROD
Old 10.04.2025, 11:33   #7  
sukhanchik is offline
sukhanchik
Administrator
sukhanchik's Avatar
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,343 / 3563 (125) ++++++++++
Join Date: 13.06.2004
Location: Москва
Quote:
Originally Posted by kitty View Post
Если все работает в PROD и копию базы(то есть, включая modelstore) восстановить в PrePROD, то обязательно ли снова гегерить CIL? Или можно скопировать XppIL.dll и обойтись без повторной компиляции + генерации CIL? (впевдо-код все равно в model store уже есть, то есть, компилировать не обязательно, думаю. А вот с dll не очень понимаю. Наверное, зависит от машины, на которой генеришь) Таким образом можно сэкономить несколько часов и иметь гарантированно рабочее приложение, как в PROD
CIL состоит из двух частей (условно) - это записи в таблички SysXppAssembly, которая находится в БД модели и папка XppIL с лежащими в ней подпапками и файлами, которая хранится на АОСе.
Т.е. теоретически, если восстановить БД модели и заменить папку XppIL на всех АОСах PrePROD-а, то должно сработать.
Но я не проверял, потому что при копировании приложения (через бекап / восстановление БД модели) я просто собираю полный CIL на целевом приложении (в данном случае PrePROD). Это занимает минут 20-30. Тут достаточно спорный вопрос - что быстрее копировать папку XppIL или собрать полный CIL при условии, что копируется еще подпапка source c более, чем 300 тыс файлов. Без нее конечно быстрее, но у нас обычно PrePROD еще иногда может использоваться для отладки, а значит эта папка 100% нужна

В то же время, зашив в Powershell-скрипт все шаги по копированию БД, сборки CIL, перенастройки SSRS-отчетов и прочих интеграций - можно добиться достаточно быстрого копирования. Собственно - без учета времени копирования основной БД или синхронизации (если брать только модель) - то в сумме вся процедура занимает около 30-40 минут (5 минут тратится на первый старт АОСа после очистки таблички SysXppAssembly).
__________________
Возможно сделать все. Вопрос времени
Old 11.04.2025, 15:08   #8  
kitty is offline
kitty
Участник
 
383 / 30 (2) +++
Join Date: 24.05.2005
Я хотела точно не огрести проблем с CIL , тк надо срочно сделать багфикс. Поэтому по-максимому хотела избежать ошибкок кв нем, да и время на его генерацию не тратить.

Нашла старый док по этому клиенту , указано, что полная компиляция в продакшн 5 часов и Cil полчаса . В PrePROD тут дольше будет. Но, как я понимаю, можно только CIL обойтись, без полной компиляции, тк modelstore уже содержит откомпилированный код. Поэтому вопрос времени отпадает сам собой, вы правы. Ну час -два будет генериться. Это терпимо
Old 11.04.2025, 15:20   #9  
kitty is offline
kitty
Участник
 
383 / 30 (2) +++
Join Date: 24.05.2005
А вот обратный вопрос. Я сейчас сделаю фикс на PrePROD. Его патчем на PROD надо положить (на USR слой). Фикс - это изменение кода в методе класса. Может, еще существующем menu item сделаю runOn = Server. То есть, с ID никаких проблем не должно быть.

Можно ли такую процедуру успользовать,
  1. Делаю бэкап modelstore с помощью AXUtil
  2. Останавливаю все AOS, кроме одного. Передодключаюсь и попадаю на этот оставшийся АОС и на нем делаю reject new users
  3. Импортирую xpo на USR слой (естественно, проверяя, что нет модицикаций в лкссе на нем уже и делая сравнения и бэкап, если есть)
  4. Компилирую + compile forward на импортируемом классе
  5. Делаю Incremental CIL
  6. Запускаю остановленные AOS
  7. Даю доступ пользователям на текущий AOS
?
Или нужно для такого патча также делать полный compile и генерировать полный CIL

Last edited by kitty; 11.04.2025 at 15:27.
Old 11.04.2025, 15:21   #10  
sukhanchik is offline
sukhanchik
Administrator
sukhanchik's Avatar
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,343 / 3563 (125) ++++++++++
Join Date: 13.06.2004
Location: Москва
Quote:
Originally Posted by kitty View Post
Я хотела точно не огрести проблем с 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 раз в неделю компилируется из АОТ "на всякий случай"
__________________
Возможно сделать все. Вопрос времени
Old 11.04.2025, 15:24   #11  
sukhanchik is offline
sukhanchik
Administrator
sukhanchik's Avatar
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,343 / 3563 (125) ++++++++++
Join Date: 13.06.2004
Location: Москва
Quote:
Originally Posted by kitty View Post
А вот обратный вопрос. Я сейчас сделаю фикс на PrePROD. Его патчем на PROD надо положить (на USR слой). Фикс - это изменение кода в методе класса. Может, еще существующем menu item сделаю runOn = Server. То есть, с ID никаких проблем не должно тыть.

Можно такую процедуру успользовать:
Да, так и надо делать. Но я еще предпочитаю после сборки CIL (равно как и после компиляции) рестартовать АОС, на котором эта сборка / компиляция выполнялась. Иначе в случае компиляции высока вероятность глюков (таблицы, View и Map могут переходить друг в другаЗ), а в случае CIL - просто очищаю оперативную память от мусора (иначе в ней все классы и таблицы находятся)
__________________
Возможно сделать все. Вопрос времени
Tags
ax2012 r3

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Почему может не работать Exception внутри транзакции axm2017 DAX: Программирование 3 27.03.2023 11:29
ax7: есть ли способ сделать так, чтобы в VS ошибки не пропадали при сохранении файла? mazzy DAX: Программирование 6 18.10.2017 10:41
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
X++: X++ Function num2Str: Difference in .NET CIL Mode Blog bot DAX Blogs 0 09.03.2012 07:45
Может ли Axapta3.0 работать под MSSQL SERVER 2005 grishan DAX: Администрирование 3 12.03.2006 18:08

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 17:48.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.