[ELMA3] Типичные ошибки запуска сервера и способы их устранения
В этой статье мы рассмотрим часто встречающиеся ошибки и методы их устранения.
1. Ошибка: Ошибка инициализации конфигурации ELMA ---> System.InvalidOperationException: Cannot check database exists ---> System.Data.SqlClient.SqlException: Ошибка входа пользователя "IIS APPPOOL\Elma3-Standart".
Причина: Авторизация на сервере IIS осуществлена под пользователем не имеющим прав администратора.
Решение: Для устранения данной ошибки IIS сервера необходимо зайти в Диспетчер служб IIS (стандартно на сервере в Пуск – Администрирование). В нем на вкладке Пулы приложений у пула "ELMA3-Standart" выбрать в контекстном меню пунк Дополнительные параметры. В нем, в таблице Модель процесса, в поле Удостоверение указать учетную запись LocalSystem либо реальную учетную запись с правами администратора, после чего следует перезапустить веб-сервер.
2. Ошибка: The underlying connection was closed: An expected error occurred on a receive: Unable to read data from the transport connection: Удаленный хост разорвал существующее подключение: Удаленный хост разорвал существующее подключение.
Причина: Сервер ELMA запущен с недостаточными правами доступа.
Решение: В случае, если сервер располагается на базе Cassini, Вам необходимо нажать клавишу с логотипом Windows (флажок Microsoft) + R и ввести следующую команду в диалоговое окно: "services.msc" (без кавычек), после чего появится окно служб Windows. В нем Вы сможете найти строчку Веб-сервер ELMA, кликнуть правой кнопкой мыши и выбрать пункт Свойства, в котором и располагается искомая вкладка Вход в систему. Если же сервер основывается на базе IIS, то в этом случае необходимо так же открыть меню Выполнить (клавиша Windows + R) и ввести команду inetmgr. Откроется окно диспетчера служб IIS, в окне Подключения найдите пункт Пулы приложений, выделите его, откроется список текущего пула, где и должна быть запись о сервере ELMA. Также кликнув правой кнопкой мыши на записи, выберите пункт Дополнительные параметры. Нужная запись находится в строке Удостоверение указажите учетную запись LocalSystem либо реальную учетную запись с правами администратора, после чего следует перезапустить веб-сервер.
3. Ошибка: *System.UnauthorizedAccessException: Отказано в доступе по пути «С:\ELMA3-Express\UserConfig\configuration.packges».
Решение: Удаление файла с расширением .packages из папки UserConfig.
4. Ошибка: Сервер не запущен из-за ошибки.
Причина: Имена в SQL Server Management Studio базы и файле configuration.config не совпадают.
Решение: Изменение названия БД в файле configuration.config.
5. Ошибка: Ошибка создания резервной копии данных.
Причина:Недостаточно места на диске.
Решение: Освободить место для корректного создания бекапа базы.
6. Ошибка: EleWise.ELMA.Runtime.Db.DbStructureException: Ошибка обновления структуры БД ---> System.Data.DataException: Не удалось выполнить запрос DROP INDEX UK_principal_name ON sysdiagrams ---> System.Data.SqlClient.SqlException: Явная инструкция DROP INDEX недопустима в индексе "sysdiagrams.UK_principal_name". Он используется для принудительного применения ограничения UNIQUE KEY.
Причина: В SQL Server Management Studio, в разделе Системные таблицы не должно быть таблиц.
Решение: Остановите сервер ELMA и откройте SQL Server Management Studio, в списке баз данных выберите нужную БД и разверните список таблиц. В разделе Системные таблицы не должно быть таблиц. Если они там есть, удалите их. Запустите сервер ELMA.
7. Ошибка: Ошибка из-за наличия активных подключений к БД.
Причина: После восстановления базы из бекапа на сервере со временем отличным от предыдущего может остаться информация об активном подключении.
Решение: Создание резервной копии и выполнение запроса в БД. Текст запроса: Delete from DB_ACTIVECONNECTIONS.
8. Ошибка: EleWise.ELMA.Runtime.Db.DbStructureException: Ошибка обновления структуры БД ---> NHibernate.TransactionException: Commit failed with SQL exception ---> FirebirdSql.Data.FirebirdClient.FbException: unsuccessful metadata update
object INDEX is in use ---> FirebirdSql.Data.Common.IscException: unsuccessful metadata update
Причина: Ошибка обновления.
Решение: Сделайте резервное копирование базы и восстановите ее. (Для корректной работы системы на FireBird данную операцию необходимо производить с периодичностью раз в две недели).
9. Ошибка: *EleWise.ELMA.Runtime.Exceptions.ConfigurationInitializeException: Ошибка инициализации конфигурации ELMA ---> System.InvalidOperationException: Не удалось подключиться к базе данных ---> FirebirdSql.Data.FirebirdClient.FbException: Unable to complete network request to host "127.0.0.1". ---> FirebirdSql.Data.Common.IscException: Unable to complete network request to host "127.0.0.1".
Причина: Ошибка в файле configuration.config в строке <add name="MainDB" connectionString="data source=127.0.0.1;initial catalog={CONFIGDIR}\base.fdb;user id=sysdba;password=masterkey;character set=UNICODE_FSS;dialect=3;server type=0" />.
Решение: Убедиться, что в строке<add name="MainDB" connectionString="data source=127.0.0.1;initial catalog={CONFIGDIR}\base.fdb;user id=sysdba;password=masterkey;character set=UNICODE_FSS;dialect=3;server type=0" /> отсутствуют опечатки, соблюден регистр символов.
10. Ошибка: *EleWise.ELMA.Runtime.Exceptions.ConfigurationInitializeException: Ошибка инициализации конфигурации ELMA ---> System.InvalidOperationException: Не удалось подключиться к базе данных ---> System.Data.SqlClient.SqlException: Не удается открыть базу данных "ELMA", запрашиваемую именем входа. Не удалось выполнить вход.
Ошибка входа пользователя "NT AUTHORITY\система".
Причина: Авторизация на сервере Cassini осуществлена под пользователем не имеющим прав администратора.
Решение: Необходимо запустить сервер Elma от имени учетной записи, обладающей правами администратора в Windows. Для этого зайдите в Панель управления – Администрирование – Службы, найдите там Веб-сервер Elma, щелкните по нему правой кнопкой мыши, выберите Свойства, в открывшемся окне перейдите на вкладку Вход в систему, установите флажок С учетной записью и введите данные учетной записи, обладающей правами администратора.
Дополнение: Ошибка сервера MS SQL 2008 и выше Login failed for user ’NT AUTHORITY\система’. Причина: не удалось открыть явно указанную базу данных "ELMA". [КЛИЕНТ: <local machine>]. Ошибка: 18456, серьезность: 14, состояние: 38.
Причина: Авторизация верная, запуск происходит с правами администратора, но база данных недоступна (или нет разрешения).
Решение: Группе NT AUTHORITY\система необходимо добавить роль sysadmin на SQL сервере. Для этого зайдите Microsoft SQL Server Management Studio, раздел Безопасность – Имена входа и выберите свойства группы NT AUTHORITY\система. В меню Роли сервера установите флажок напротив роли sysadmin.
11. Ошибка: *EleWise.ELMA.Runtime.Exceptions.ConfigurationInitializeException: Ошибка инициализации конфигурации ELMA ---> System.InvalidOperationException: Не удалось подключиться к базе данных ---> System.Data.SqlClient.SqlException: Разрешение CREATE DATABASE запрещено в базе данных "master".
Не удалось присоединить файл "F:\ELMA3-Standart\UserConfig\ELMA3.mdf" в качестве базы данных "ELMA3".
Причина: Ошибка в файле configuration.config в строке AttachDbFilename={CONFIGDIR}\ELMA3.mdf;
Решение: Удалить строку "AttachDbFilename={CONFIGDIR}\ELMA3.mdf" в конфигурационном файле configuration.config. После внесенных изменений файл необходимо сохранить и перезапустить веб-сервер.
12. Ошибка: При работе с веб-частью отображается всплывающее окно с ошибкой Не пройдена проверка предусловий запуска.
Соответственно, при попытке авторизации в Дизайнере возникает ошибка.
Причина: В окне ошибки виден пустой параметр – имя сервера.
Решение: подключиться к серверу MSSQL от имени администратора и выполнить правильный SQL-запрос:
EXEC sp_dropserver N'elma-local-loop'
GO
EXEC sp_addlinkedserver N'elma-local-loop', N' ', N'SQLNCLI', N'localhost\SQLSERVER2014'
GO
EXEC sp_serveroption [elma-local-loop], N'remote proc transaction promotion', 'false'
EXEC sp_serveroption [elma-local-loop], N'rpc out', 'true'
GO
где localhost\SQLSERVER2014 – имя сервера базы данных.
Чтобы убедиться, что ошибка исправлена, нужно выполнить запрос:
select * from sys.servers where lower([name]) = 'elma-local-loop'
Результат будет выглядеть следующим образом:
13. Ошибка: Ошибка Инициализации конфигурации ELMA: Версия БД <название версии> не подходит по минимальным требованиям (предоставлена версия – <используемая версия БД>, требуется как минимум <версия БД, необходимая для корректной работы системы ELMA>
Причина: версия используемой базы данных не подходит по минимальным системным требованиям для используемой редакции системы ELMA.
Решение: необходимо обновить версию используемой базы данных до соответствующей минимальным системным требованиям для используемой редакции системы ELMA.
14. Ошибка: DbStructure files with the same GUID are found <uid>: <модуль1>;<модуль2> – в модулях системы содержатся xml-преобразования базы данных с одинаковыми uid.
Причина: в указанных модулях системы (модуль1, модуль2) содержатся xml-преобразования базы данных с одинаковыми uid.
Решение: изменить дублирующийся uid в одном из модулей.
15. Ошибка: Npgsql.NpgsqlException: No password has been provided but the backend requires one (in MD5).
Решение: Если отсутствуют права суперпользователя по умолчанию, если они не были указаны при установке, укажите их в файле configuration.config, который располагается в папке конфигурации ELMA, по умолчанию ../<Общая папка с файлами системы ELMA>/UserConfig:
- в секции main добавьте ключи sysUser и sysPassword со значениями для пользователя – владельца базы данных;
- для этого случая желательно отключить автоматическое резервное копирование данных, добавив ключ backupEnabled со значением false.
Пример настроек представлен на рисунке.
16. Иногда при работе в системе могут возникнуть ошибки из-за прав, которые настраиваются в IIS.
Например, если пул ELMA4 в IIS запускается под ApplicationPoolIdentity, то при импорте пакетов, требующем перезапуска сервера, возникает следующая ошибка:
"ERROR 2021-03-04 16:02:13,055 [5] EleWise.ELMA.Logging.Logger - Во время выполнения автоматического импорта произошла ошибка: В процессе импорта произошла ошибка: Не удалось проверить статус запуска сайта 'ELMA-Enterprise-4_0_7' в IIS. Скорее всего, у пользователя, под которым запущен пул приложений IIS, отсутствуют необходимые привилегии".
Оригинальный текст ошибки:
"Имя файла: redirection.config
Ошибка: Не удалось прочитать файл конфигурации из-за отсутствия необходимых разрешений".
При этом группе IIS_IUSRS выданы полные права на папку с системой и C:\Windows\Temp\ELMA.
В этом случае проблема возникает из-за отсутствия прав. Решение проблемы — это вопрос администрирования.
ApplicationPoolIdentity — учётная запись с минимальными правами. То, что требует ELMA4 (управление сайтом, чтение данных пула и др.), эта учётная запись по умолчанию не обеспечивает.
В этом случае варианта решения два:
1. Если политика безопасности позволяет, изменить удостоверение пула приложений.
2. Выдать права для работы под ApplicationPoolIdentity или той учётной записью, под которой работает администратор. Для IIS_IUSRS выдать права на %SystemRoot%\System32\inetsrv\config.
17. Ошибка: *EleWise.ELMA.Runtime.Db.DbStructureException: Ошибка обновления структуры БД ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-00054: ресурс занят и задано его получение с параметром NOWAIT, либо истекло время ожидания.
Решение:
1. Убедиться, что в схеме нет блокировок.
2. Увеличить таймауты запросов в базу. Для этого в файле ~\Web\settings.config:
- изменить значение value для ключа <add key=DbTransformCommandTimeout” value=“3600” />, например, выставить value=“7200”;
- изменить значение value для ключа <add key=“Application.DbCommandTimeout” value=“30” />, например, выставить значение value=“120”.
Особенности настройки nginx
Если используется веб-сервер nginx, могут возникнуть следующие ошибки:
- Ошибки, связанные с обработкой заголовка __RequestVerificationToken в POST-запросе.
Решение: в файле конфигурации веб-сервера nginx в части server добавьте строку underscores_in_headers on; или ignore_invalid_headers off;
- Ошибки, связанные с некорректными редиректами.
Решение: в файле конфигурации веб-сервера nginx параметр proxy_set_header укажите в формате proxy_set_header Host $host:$server_port;