Ошибки: диагностика ошибок в работе сайта, обработка ошибок 403, 404,.. — Техническая документация — Помощь
Общие сведения о кодах
Коды ошибок бывают положительными и отрицательными или успешными и неуспешными. Есть четыре типа кодов:
- 2xx — запрос выполнен успешно — сервер успешно отправил клиенту запрашиваемый документ
- 3xx — запрос успешно перенаправлен — тоже положительный код. Он говорит о том, что запрос клиента был перенаправлен. Используется при работе с кэширующими серверами, а также в алгоритме, когда браузер клиента проверяет актуальность документа на сервере (дату создания, размер и так далее)
- 4xx — ошибка — документ не был отправлен клиенту, так как произошла критическая ошибка. Например, запрошенный документ не найден на сервере, доступ к документу запрещен и так далее
- 5xx — ошибка сервера — критическая ошибка на сервере. Например, на сервере не смог нормально отработать скрипт пользователя
Возможные ошибки при первичном размещении сайта
Вы разместили сайт на хостинге компании .
Ошибка — показывается список файлов вместо первой страницы
Вы загрузили файлы на сервер, но вместо первой страницы видите список загруженных на сервер файлов. Вероятная причина ошибки в том, что вы загрузили файлы в каталог с разрешенным листингом и при этом у вас отсутствует индексный файл. Напомним, что размещать файлы нужно в каталоге www, который находится в каталоге с названием вашего домена. Читайте об этом подробнее здесь.
Ошибка 403 «Доступ запрещен» — устраняем причины
Данная ошибка возникает тогда, когда сервер не смог выполнить запрос по причине запрещенного доступа к файлу. Наиболее часто это возникает в трех случаях:
- В каталоге нет индексного файла (index.html, например) и при этом запрещен просмотр списка файлов в данном каталоге или на всем виртуальном сервере. Можно попробовать создать файл с именем index.html и посмотреть не исчезнет ли ошибка.
- Выставлены такие «права» доступа на файл, что веб-сервер Apache не смог прочитать файл на диске сервера. Попробуйте изменить права доступа на 644, например.
- Пользователь попытался обратиться к скрипту (в каталоге cgi-bin), на который выставлены неправильные права — нет права на чтение+исполнение (r+x) конкретного скрипта. Измените права на 755.
Обработка ошибки 404 «Файл не найден»
Ошибка 404 (Файл не найден) возникает тогда, когда пользователь запрашивает у веб-сервера документ, которого нет на диске. То есть, когда пользователь запрашивает несуществующий файл. Это наиболее «популярная» из всех ошибок. Вы можете наблюдать возникновение таких ошибок в файле error_log и учитывать это — отслеживать какие документы на сервере «не найдены» и корректировать неправильные ссылки из своих html-документов. Также ссылки на несуществующие документы могут вести с других сайтов.
Для удобства посетителей сайта можно обрабатывать ошибки 404 заменяя стандартные ответы веб-сервера на свои страницы с нужным описанием причины возникновения ошибки и советами что делать в этом случае. Также полезно разместить на такой странице карту вашего сайта или ссылку на поисковую систему.
Как обрабатывать ошибку 404. Создайте в каталоге www файл .htaccess и поместите в него следующую инструкцию для веб-сервера Apache:
ErrorDocument 404 /not-found.html
Затем создайте файл not-found.html в который поместите описание возникшей ошибки и советы о том, что делать в этом случае посетителю вашего сайта. Теперь пользователь, который наберет в своем браузере адрес несуществующей страницы, будет автоматически перенаправлен сервером на файл not-found.html.
С помощью директивы ErrorDocument можно обрабатывать не только ошибку 404, но и практически все другие ошибки. Например, можно обработать так и ошибку 403, которая упоминается в этом документе выше. О файле .htaccess и его практическом использовании можно почитать тут.
Внимание: особенность браузеров MS Internet Explorer версий 5.xx и 6.xx состоит в том, что если ваш файл ошибок будет иметь размер менее 512 байт, то браузер покажет пользователю не ваш файл, а свое собственное сообщение об ошибке 404. Самым простым решением в данной ситуации является заполнение файла ошибок пробелами так, чтобы его размер превысил 512 байт. Подробнее об этом вы можете прочитать на сайте компании Microsoft.
Ошибка 500 «Internal Server Error»
Ошибка 500 «Internal Server Error» возникает в случае невозможности запуска скрипта, который вы разместили на сервере, в случае ошибок в скрипте, а также в случае, когда размещена неправильная инструкция в файле .htaccess. Этот список причин возникновения ошибки 500 не конечный, есть еще масса причин, по которым может возникнуть ошибка 500. Однако упомянутые три случая встречаются наиболее часто.
Рассмотрим сначала случай, когда вы поместили некорректную инструкцию в файл .htaccess. Если вы ошиблись в написании названия нужной директивы или параметров к ней, в файле error.log вы найдете примерно такую ошибку:
[Wed Apr 14 17:01:38 2004] [alert] [client 217.16.16.16]
/home/uXXXXX/aaa.ru/www/.htaccess:Invalid command 'DrectoryIndex',
perhaps mis-spelled or defined bya module not included in the server
configuration
Веб-сервер укажет вам, какую конкретно директиву он посчитал ошибочной — ее нужно будет исправить. В данном случае веб-сервер сообщил, что директивы DrectoryIndex он не знает. И действительно — нет директивы DrectoryIndex, есть DirectoryIndex. Имеет место опечатка.
Если ошибка 500 возникает при обращении к скрипту на языке Perl, размещенному в каталоге cgi-bin, нужно проверить права доступа на этот скрипт. Права должны быть 755 (rwxrx-rx). Если это не так, нужно изменить права на 755 командой chmod 755 script.pl в unix shell или воспользоваться для этого FTP. Нужно отдельно отметить — права на скрипты должны быть установлены строго в 755.
Пожалуйста, проверьте правильный ли режим передачи файлов по FTP вы использовали при загрузке скрипта на наш сервер. Все скрипты, равно как и любые другие текстовые файлы, должны передаваться по FTP в текстовом (ASCII) режиме. Если же был использован двоичный (Binary) режим передачи файлов, скрипты наверняка работать не будут.
Если после проверки корректности установленных прав на файл скрипта ошибка не исчезла, нужно изучить последние записи в файле error.log — в него веб-сервер помещает все сообщения об ошибках. Так вы найдете строчку вида
[Fri Apr 9 15:05:31 2004] [error][client 217.16.16.16] Premature end of
script headers: /home/uXXXX/aaa.ru/cgi-bin/script.pl
Первое, что нужно сделать при получении такой ошибки, это проверить правильно ли скрипт выдает HTTP-заголовки. Каждый скрипт должен сначала печатать строку с указанием соответствующего Content-type и только потом непосредственно то, что увидит пользователь (например, HTML-код). Пример строки для выдачи заголовка обычного HTML-документа:
print "Content-type: text/html; charset=windows-1251\n\n";
Если и после выдачи правильных заголовков ошибка 500 не исчезла, нужно проверить корректность работы скрипта в целом. Для этого нужно получить доступ в unix shell и далее выполнить команду проверки синтаксиса:
> perl -cw script.pl
script.pl syntax OK
Если скрипт написан с ошибками, их нужно исправить, руководствуясь соответствующей диагностикой, а также проверить синтаксис скрипта снова.
Ошибка 500 — внутренняя ошибка сервера (500 internal server error), как ее исправить
Внутренняя ошибка 500 — Internal Server Error
Ошибка с кодом 500 (internal server error) – внутренняя ошибка сервера.
Значение 500 — код статуса протокола HTTP. Причина ошибки с таким кодом — неисправность конфигурации сервера, либо появление информации о том, что произошел отказ компонента. При ошибке 500 программное обеспечение работает, но есть серьезные внутренние проблемы, которые мешают запросам правильно обрабатываться.
Такая ошибка появляется у построенных на разных CMS сайтах.
Причины возникновения 500 ошибки сервера и способы их исправить
Ошибка 500 говорит о некорректной обработке запросов. Из-за этого пользователи и поисковые системы не могут полноценно работать с сайтом. Необходимо выявить и исправить причину, из-за которой возникло сообщение об ошибке. В случае, когда ошибка появляется часто и устраняется только технической поддержкой, стоит сменить хостинг.
Мы предлагаем бесплатный перенос Ваших проектов с другого хостинга на наш.
Ошибка 500 — внутренняя, поэтому если она возникла на нужном для просмотра сайте, то можно только посетить его позже, когда восстановят работоспособность.
Причин, по которым появляется ошибка 500 — огромное количество. Задача сводится к поиску и устранению неисправности.
Неправильные права доступа
Частая причина возникновения ошибки – установка неправильных прав доступа на файлы скриптов — 777. Из-за этого они блокируются сервером. Такая настройка разрешает всем вносить изменения в файл, что недопустимо с точки зрения обеспечения безопасности. В случае, когда требуется установить такие права, поставщик всегда сообщает об этом заранее.
Как исправить?С помощью файлового менеждера (на скриншоте — бесплатная программа FileZilla) просмотреть права доступа к файлу или папке на сервере.
В первую очередь надо проверить, каким образом настроены права доступа. Для каждого типа элементов они проверяются индивидуально. Для папок рекомендуется значение 755, для скриптов — 600, а для других файлов — 644.
Оптимальное решение — один человек. который может управлять аккаунтом. Не желательно давать кому-либо права доступа к корневым папкам сайта.
Высокая длительность работы скрипта
Помимо PHP ограничений на время, за которое должен завершить работу скрипт, ограничения есть и от сервера. Появление ошибки возможно, когда нет ответа за указанный в конфигурации промежуток времени. По этой причине работа скрипта будет автоматически прекращена.
Как исправить?
Решение проблемы заключается в оптимизации работы скрипта. Можно использовать специальные сервисы, которые помогают найти медленный участок кода. Если используется выделенный сервер или VPS, можно увеличить промежуток времени ожидания сервера. Маловероятно, что удастся изменить этот параметр при использовании виртуального хостинга. Это возможно только при согласии технической поддержки.
Ошибки htaccess
У файла «.htaccess» определен строгий синтаксис, который нельзя нарушать. Если в нем написаны ошибочные директивы, то это приведет к появлению ошибки 500. Возможно, директива написана правильно, но не поддерживается.
Как исправить?
В корневой папке сайта нужно поискать файл «.htaccess». Если он нашелся, то нужно скопировать его, чтобы не потерять, а затем удалить из папки. После этой процедуры сайт может заработать. В таком случае станет точно известно, что причина была в этом файле. Затем нужно исправить файл (самый простой способ — добавить файл из чистого дистрибутива используемой системы управления сайтом).
Кроме того, есть возможность посмотреть сведения о появившихся ошибках. Ошибки сервера заносятся в специальный файл «error.log». В нем нужно найти строки о том, какая из директив ошибочна. Например, информация «Invalid command ‘RewritRule’» говорит о том, что директива «RewritRule» написана с опечаткой. Исправление на «RewriteRule» убирает эту ошибку.
Нехватка памяти для работы кода
На виртуальном хостине контролируется, какое количество памяти потребляет скрипт. В случае, когда скрипт хочет использовать слишком много памяти, возможно появление сообщения об ошибке 500.
Эта функция предотвращает большую нагрузку на сервер со стороны каждого аккаунта.
Как исправить?
В первую очередь следует определить, нет ли в коде ошибок, за счет которых он требует слишком много памяти. Если скрипт работает правильно, то начать решение проблемы можно с общения с сотрудниками технической поддержки. В некоторых случаях они помогают разрешить этот вопрос. Мы не обязываем клиента переходить на дорогой тариф из-за нехватке памяти, для решения проблемы можно за небольшую плату увеличить кол-во памяти на текущем тарифном плане.
Тарифы виртуального хостинга с выбором периода предоплаты от 1 месяца до 3-х лет.
Ошибка в cgi скрптах
Ошибка 500 чаще появляется из-за ошибок в «htaccess», но еще одна её причина – неправильная работа с CGI-скриптами.
Как исправить?
Существует три основных правила, которые могут быть нарушены.
- Формат окончания каждой из строк — UNIX (n), а не Windows (rn). Для обеспечения такого условия их загрузка проводится по FTP в режиме ASCII.
- Права доступа для скриптов CGI и папок, где они хранятся — 0755. Такая настройка разрешает процедуру записи исключительно владельцу, чтоб правильно с позиции безопасности.
- При работе скрипта CGI могут появиться неправильные HTTP-заголовки ответа. Следует проанализировать содержимое файла «error log» на предмет ошибок.
Ошибка 500 при использовании WordPress
В первую очередь рекомендуется определить, имеет ли файл «.htaccess» отношение к возникновению неисправности. Для этого выполнить его резервное копирование, удалить, а затем обновить страницу. Если сайт после этого работает, значит причина найдена и осталось исправить файл.
Файл «.htaccess» используется WordPress в случае, когда обычная структура ссылок была изменена на ЧПУ. Помимо этого, его используют плагины WordPress, которые осуществляют резервное копирование и некоторые другие функции.
Чаще всего файл «.htaccess» создается однократно, но в WordPress это происходит регулярно. Если в файл заносится ошибка, то хостинг считает его поврежденным и появляется «ошибка 500». Записывать лишние данные, которые воспринимаются как повреждения, могут:
- движок;
- тема;
- плагины, которые активированы.
Если приведенные методы не помогли, то в качестве крайнего варианта можно отключить функцию wordpress, которая создает и переписывает файл «.htaccess». Этот метод подходит только как временная мера, поскольку вызывает проблемы при активации плагинов.
Мы предлагаем бесперебойный WordPress хостинг, оптимизированный под создание сайтов на этой CMS.
Поочередная проверка элементов позволяет отследить, какой из них — причина ошибки. В процессе поиска неисправности постоянно проверяют, не исчезает ли ошибка 500:
- сменить тему и проверить наличие ошибки;
- по очереди деактивировать плагины и следить за изменениями;
- поиск ошибок в сторонних скриптах;
- поиск проблемы в движке WordPress.
Сбои плагина иногда видно по искажению внешнего вида сайта. Возможно наличие ошибок в работе конкретного плагина или его конфликт с остальными.
Если файл «.htaccess» – не причина проблемы, нужно убедиться, что скрипты работают с нормальной скоростью. Поиск медленно работающиех скриптов можно выполнить самостоятельно, либо попросить помощи у специалистов службы технической поддержки. Файл с обнаруженной ошибкой и временем ее появления отражается в файле «Error Log».
В WordPress частые причины ошибки — файлы плагинов или тем. Можно деактивировать плагин и применить новый. Если причиной неисправности оказалось ядро WordPress, потребуется обновление.
На хостинге выделяется определенный объем оперативной памяти для использования. Ошибка 500 появится и из-за превышения этого допустимого значения. В админ-панели можно убедиться, не превысил ли сайт этот лимит. Там приведены сведения о уровне загруженности сервера. В файле с перечнем появляющихся ошибок видно, какой из файлов вызвал чрезмерную загрузку. Его придется обновить или удалить, если это допустимо.
Увеличить объем памяти возможно путем корректирования файла. В корне хостинга нужно найти «wp.config.php» и после последней строки добавить в него код:«define(‘WP_MEMORY_LIMIT’, ’64M’».
В ряде случаев помогает обновление WordPress до последней версии.
Ошибка 500 при входе в административную панель Joomla
Ошибка 500 иногда возникает после ввода логина и пароля для панели администрирования Joomla – «админки». При этом работоспособность сайта сохраняется. Код ошибки не указывает на конкретную проблему, поэтому требуется её самостоятельный поиск.
Как исправить?
В журнале ошибок хранятся сообщения об ошибках. Он называется «error.php» и лежит в каталоге «logs». При поиске ошибок, которые появились недавно, важно обратить на последние записи в этом файле. Там содержатся сведения о нарушениях в работе модулей, если они происходили.
Другая вероятная причина ошибки — невозможность записи в каталоги «logs» и «tmp». Возможно, потребуется установка полных прав для этих каталогов – 777.
Рекомендуется проверить правильность путей к каталогам «logs» и «tmp» в файле конфигурации «configuration.php». Желательно указать полные пути к этим каталогам.
Если проблема сохраняется, рекомендуется проверить корректность файла «htaccess» и по очереди отключить и включить все логины и плагины через базу данных. В «htaccess» возможны ошибки, опечатки и лишняя информация. Например, ошибка 500 появляется из-за того, что не закомментирована строка Options +FollowSymLinks. При редактировании файла можно не удалять, а комментировать строки и проверять, как изменяется после этого работа сайта.
Если решить проблему самостоятельно не удается, потребуется обращение в службу технической поддержки.
iPipe – надёжный хостинг-провайдер с опытом работы более 15 лет.
Мы предлагаем:
Связанные статьи:
Внутренняя ошибка сервера 500 на сайте: что значит код ошибки и как исправить Internal Server Error | REG.RU
500 ошибка сервера ― это проблема, с которой обычно может справиться опытный пользователь. Если вы новичок, рекомендуем сразу обратиться в службу поддержки, чтобы ошибка 500 была устранена.
Что такое внутренняя ошибка сервера 500
Все ошибки, которые начинаются на 5, говорят о том, что проблема возникла на стороне сервера. Ошибка 500 встречается пользователям чаще всего. Что значит ошибка 500? Это общая проблема сервера, при которой браузер не может получить ответ от сервера из-за его неисправности, но конкретная причина неизвестна.
Внешний вид страницы с такой ошибкой может быть абсолютно разным, так как у владельца сайта есть возможность создать её самостоятельно. Может использоваться разный текст и изображения. Например, может встретиться такое описание ошибки:
- Внутренняя ошибка сервера 500,
- Ошибка 500 Internal Server Error,
- Временная ошибка (500),
- Внутренняя ошибка сервера,
- Внутренняя ошибка HTTP 500,
- Ошибка 500.
Вот так выглядит страница с ошибкой на REG.RU:
Причин появления этой ошибки на web-хостинге может быть много. Основными являются:
- ошибки в файле .htaccess,
- неподходящая версия PHP,
- некорректные права на файлы и каталоги,
- большое количество запущенных процессов,
- большие скрипты,
- несовместимые или устаревшие плагины.
В основном решить проблему с сервером можно только на стороне владельца веб-ресурса, но есть несколько действий, которые может сделать пользователь со своей стороны.
Что делать, если вы пользователь
Перезагрузите страницу
Так как ошибка может быть вызвана как серьёзными проблемами на сервере, так и небольшими перегрузками сайта, попробуйте перезагрузить страницу. Возможно, проблема временная и после перезагрузки браузер сможет связаться со страницей.
Обратите внимание! Если вы приобретаете товары в интернет-магазине и при оформлении заказа появляется 500 Internal Server Error, при перезагрузке страницы может создаться несколько заказов. Поэтому сначала проверьте, оформился ли ваш предыдущий заказ. Если нет, пробуйте оформление заказа заново.
Очистите кэш и cookies браузера
Кэш и cookies сохраняют данные посещаемых сайтов и данные аутентификаций, чтобы в будущем загружать веб-ресурсы быстрее. Если на ресурсе уже была проблема 500, при повторном входе на сайт может загружаться старая версия страницы с ошибкой из кэша, хотя на самом деле страница уже работает. Очистить кэш и куки браузера вам поможет инструкция.
Обновите операционную систему
Устаревшие компоненты операционной системы могут вызывать ошибки в браузере. Проверьте актуальность версии ОС на вашем устройстве и обновите её, если нужно.
Проверьте браузер и устройство на вирусы
Если вы часто замечаете ошибку 500, высока вероятность, что на устройстве находится вирус. Вирусные программы и шпионские утилиты могут нарушать связь с серверами и имитировать ошибки. Проверьте своё устройство и браузер на наличие вирусов и удалите их, если найдёте.
Переустановите браузер
Если проблема отображается на всех веб-ресурсах, неполадки в самом браузере. Удалите текущий браузер и установите его заново с официального сайта.
Если ни одно из этих действий не решило проблему, значит, некорректно работает сам сервер сайта. Вернитесь на страницу позже, как только владелец решит проблему.
Что делать, если вы владелец сайта
В основном проблема может быть устранена только со стороны создателя сайта. Как правило, ошибки связаны с проблемами в коде. Реже проблемы могут быть на физическом сервере, который предоставляет хостинг-провайдер.
Ошибки в файле .htaccess
Неверные правила в файле .htaccess — частая причина возникновения ошибки. Чтобы узнать, провоцирует ли ошибку именно .htaccess, найдите в файлах сайта его папку и переименуйте её, например в test. Так директивы, прописанные в папке, не будут влиять на работу сервера. Если ресурс заработает, переименуйте папку обратно в .htaccess и найдите ошибку в директивах. Если вы самостоятельно вносили изменения в .htaccess, попробуйте убрать их и проверить доступность сайта. Также может помочь замена текущего файла .htaccess на стандартный для вашей CMS.
Найти ошибку может помочь онлайн-тестер. Вставьте свои данные .htaccess и адрес сайта, начиная с https://. Нажмите Test:
Ниже появится отчёт, в котором красным цветом будут выделены строки с ошибками:
Активирована устаревшая версия PHP
Устаревшие версии PHP не получают обновления безопасности, работают медленнее и могут вызывать проблемы с плагинами и скриптами. Возможно, для работы вашего веб-ресурса нужна более новая версия PHP. Попробуйте сменить версию PHP на другую по инструкции.
Установлены некорректные права на файлы и каталоги сайта
В большинстве случаев корректными правами для каталогов являются «755», для файлов — «644». Проверьте, правильно ли они установлены и при необходимости измените права на файлы и папки.
Запущено максимальное количество процессов
На различных тарифах хостинга установлены ограничения на количество одновременно запущенных процессов. Например, на тарифах линейки «Эконом» виртуального хостинга REG.RU установлено ограничение в 18 одновременно запущенных процессов, на тарифах «+Мощность» ― 48 процессов. Посмотреть все ограничения на хостинге можно на сайте REG.RU. Если пользователь превышает лимит, новый процесс не запускается и возникает ошибка.
Такое большое число одновременных процессов может складываться из CRON-заданий, частых подключений с помощью почтовых клиентов по протоколу IMAP, подключения по FTP или других процессов.
Чтобы проверить количество процессов, подключитесь по SSH. Выполните команду:
ps aux | grep [u]1234567 |wc -l
Где u1234567 — ваш логин хостинга. Где его взять, вы можете узнать в статье Как узнать логин хостинга.
Чтобы посмотреть, какие именно процессы запущены, введите команду:
Командная строка отобразит запущенные процессы:
Процесс можно завершить командой kill
, например:
Где 40522 — PID процесса.
Чтобы решить проблему, вы также можете:
- увеличить интервал запуска заданий CRON,
- ограничить количество IMAP-соединений в настройках почтового клиента. Подробнее в статье Ограничение IMAP-соединений,
- проанализировать запущенные процессы самостоятельно или обратившись за помощью к разработчикам сайта.
Если вам не удалось самостоятельно устранить ошибку 500, обратитесь в техподдержку.
Скрипты работают слишком медленно
На каждом виртуальном хостинге есть ограничения на время выполнения скрипта. Если за установленное время скрипт не успевает выполниться, возникает ошибка сервера 500. Для решения проблемы обратитесь к разработчику сайта и оптимизируйте скрипты. Если оптимизировать нельзя, перейдите на более мощный вид сервера.
У пользователей VPS есть возможность увеличить максимальное использование оперативной памяти на процесс, но лучше делать скрипты меньшего размера.
Ошибка 500 на сайте, созданном на WordPress
WordPress предлагает много плагинов для создания хорошего сайта. Они значительно расширяют возможности CMS. Однако они же могут нарушать работу сайта и вызывать ошибку 500. Вызвать ошибку могут как недавно установленные плагины, так и старые.
Для начала проверьте, нужно ли обновить плагины. Часто устаревшие плагины перестают работать и вызывают проблемы работы сайта. Если все плагины обновлены, но 500 Internal Server Error остаётся, отключите все плагины, чтобы убедиться, что именно они мешают работе сайта. Как только станет понятно, что виноват один из плагинов, отключайте их по очереди, пока не найдёте тот, который нарушает работу сервера.
Как отключить плагин в WordPress
- 1.
- 2.
Перейдите во вкладку «Плагины» ― «Установленные».
- 3.
Нажмите Деактивировать у плагина, который, как вам кажется, повлиял на работу сайта:
Если все ваши действия не решили проблему или вы не уверены в своих технических знаниях, обратитесь к службе технической поддержки. Сообщите время обнаружения проблемы и опишите все действия, которые вы предприняли перед обращением. Специалисты сделают детальную проверку настроек вашего сайта и при необходимости обратятся к администраторам сервера на стороне хостинг-провайдера. В очень редких случаях проблема может быть на самом физическом сервере.
Помогла ли вам статья?196 раз уже помогла
Что за ошибка 500 Internal Server Error и как её исправить?
Разработчики и люди, профессионально работающие с веб-приложениями, боятся 500 Internal Server Error. Оптимальный способ её устранения зависит от сервера и того, что на нём запущено. В данной статье приводятся советы по диагностике и исправлению ошибки 500.
Важно помнить, что эта ошибка происходит на стороне сервера. Это значит, что HTML-код, выполняемый на стороне клиента, а также JavaScript или любые другие запущенные в браузере объекты, не могут быть причиной, по которой возникает ошибка 500 Internal Server Error. Само название (Internal Server Error – ‘внутренняя ошибка сервера’) говорит о том, что ошибка происходит на сервере.
Многие пользователи устанавливают на свой сервер популярные CMS-системы, такие как WordPress, Joomla, Drupal и они не должны вызывать ошибку 500, если всё настроено правильно. Однако она всё равно всплывает – из-за несовместимости версий, некачественных установок или сбоя прав доступа на сервере.
Вот некоторые распространённые проблемы, которые могут вызывать подобную ошибку в часто используемых CMS:
- Если вы только что обновили движок до новой версии, вероятно, обновление прошло с ошибками и необходимо провести его повторно. Скорее всего, на сайте разработчика есть инструкции, как это правильно сделать.
- Если вы только что активировали новый плагин или новую тему, стоит попробовать отменить эти изменения. Даже профессионально написанные плагины могут конфликтовать с другими и вызывать 500 Internal Server Error nginx
- Если вы обновляли CMS, старые плагины и темы могут быть с ней несовместимы. Единственное, что можно сделать в таком случае — отключать их по очереди, пока ошибка 500 не исчезнет.
- Неправильно заданные права доступа на сервере или ошибки в файле .htaccess. Серверу не удаётся получить доступ к скриптам, файлам и другим ресурсам, поэтому он выдаёт ошибку.
Когда причиной, по которой возникает ошибка 500 Internal Server Error являются скрипты и плагины, лучше всего искать ответы на сайтах их разработчиков.
Другой причиной по которой может возникнуть ошибка 500 Internal Server Error может стать разработка и тестирование собственных скриптов.
Чтобы справиться с такой ошибкой, попробуйте следующие решения:
- Настройка прав на сервере: часто неверная настройка прав доступа к файлу или папке приводит к тому, что сервером выдаётся ошибка 500 Internal Server Error. Из-за того, что ему не удаётся запустить скрипт. Выясните, какие права должны быть настроены, и выставьте их соответствующим образом.
- Превышено время ожидания: возможно, истекло время ожидания ответа от PHP или другого серверного скрипта. Это происходит из-за того, что недоступен определённый ресурс или коде была допущена ошибка, запускающая бесконечный цикл.
- Превышено время ожидания соединения с сервером: если сервер был занят, перезагружался или потерял соединение, скрипт может выдать ошибку 500 Internal Server Error. Возможно, в следующий раз ошибки не будет. Но если ошибка появляется при тестировании, велика вероятность того, что она встретится и пользователям.
- Ошибки в файле .htaccess: в некоторых случаях ошибку 500 может вызывать код, прописанный в файле .htaccess.
- Ошибки в скрипте: если ошибку выдаёт скрипт, можете запросить у него подробную информацию об ошибке. К примеру, в PHP можно включить вывод ошибок на экран или в лог-файл, добавив директиву display_errors. По умолчанию среда выполнения может скрывать ошибки, но это не очень удобно для отладки программы.
В некоторых случаях у разработчиков нет полного контроля над сервером.
Если скрипт запускается на сервере сторонней организации, она может помочь вам в следующем:
- Предоставить документацию о своём сервере и возможных причинах ошибки 500. В зависимости от используемой операционной системы и настройки оборудования, данная ошибка может возникать по разным причинам.
- Попросите службу поддержки хостинга посмотреть лог-файлы с ошибками — системный администратор сможет определить, был ли сервер во время возникновения ошибки загружен или вовсе «упал».
Ошибка 500 Internal Server Error — как исправить? В большинстве случаев причины возникновения ошибки 500 легко исправляются. Проблема заключается в том, что без конкретной информации определение причины возникновения сбоя усложняется. Легче всего справиться с ошибкой, когда разработчик выяснит, что изменилось перед возникновением ошибки.
Не забывайте, что произошедшие изменения могли быть осуществлены и другими людьми — например, администратором сервера. Если же ничего не менялось, вероятно, сам сервер стал причиной возникновения ошибки из-за несовместимости программного обеспечения или проблем с производительностью.
Пожалуйста, оставляйте свои отзывы по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, лайки, дизлайки, подписки, отклики!
Данная публикация является переводом статьи «500 Internal Server Error: What It Is And How To Fix It» , подготовленная редакцией проекта.
Коды ошибок в диспетчере устройств в Windows
Сообщение об ошибке полностью
«Драйвер этого устройства может быть поврежден или в системе не работает память или другие ресурсы. (Код 3)»
Причина
Драйвер устройства может быть поврежден или у вас заканчивается память. в системе не работает системная память, и может потребоваться освободить или добавить больше памяти.
Рекомендуемые решения
Закрыть некоторые открытые приложения
Если на компьютере недостаточно памяти для запуска устройства, вы можете закрыть некоторые приложения, чтобы сделать память доступной. Вы также можете проверить память, ресурсы системы, а также параметры виртуальной памяти.
-
Чтобы проверить память и ресурсы системы, откройте диспетчер задач. Для этого нажмите CTRL+ALT+DELETE, а затем щелкните «Диспетчер задач».
-
Чтобы проверить параметры виртуальной памяти, откройте диалоговое окно «Свойства системы», откройте вкладку «Дополнительные параметры» и выберите «Параметры» в области «Производительность».
Удалить и переустановить драйвер
Возможно, драйвер устройства поврежден. В диспетчере устройств можно удалить драйвер и найти новое оборудование, чтобы снова установить его.
-
В диалоговом окне «Свойства устройства» перейдите на вкладку «Драйвер» и нажмите кнопку «Удалить». Следуйте инструкциям.
-
Перезагрузите компьютер.
-
Откройте диспетчер устройств, выберите «Действие»и нажмите кнопку «Проверить изменения оборудования». Следуйте инструкциям.
Примечание. Может появиться запрос на предоставление пути к драйверу. Windows может иметь встроенный драйвер или по-прежнему иметь файлы драйвера, установленные при последней установке устройства. Однако иногда открывается мастер нового оборудования, в котором может потребоваться ввести драйвер. Если вам будет предложен драйвер, но у вас его нет, попробуйте скачать последнюю версию драйвера с веб-сайта поставщика оборудования.
Установка дополнительного ОЗУ
Возможно, вам придется установить дополнительную память случайного доступа (ОЗУ).
1007 AccessDenied или Unable to federate your domain error — Exchange
- Чтение занимает 2 мин
-
- Применяется к:
- Exchange Online, Exchange Server 2013 Enterprise, Exchange Server 2013 Standard Edition
В этой статье
Исходный номер КБ: 3107293
Симптомы
При запуске мастера гибридной конфигурации вы получаете одно из следующих сообщений об ошибке:
Set-FederatedOrganizationIdentifier’: ошибка произошла при попытке Exchange для партнерской stS. Подробные сведения «Неожиданный результат был получен из Windows Live. Подробные сведения: «1007 AccessDenied: Доступ отказано.».
Не удается федератировать домен, ваше системное время, как представляется, не синхронизируется с временем на наших серверах федерации. Убедитесь, что ваше системное время правильно, и повторить мастер гибридной конфигурации.
Причина
Эта проблема возникает из-за того, что время локальной системы не синхронизируется с допустимым сервером времени. Эта проблема возникает, если время системы локальной системы и системное время сервера, на котором вы работаете мастер гибридной конфигурации, отличаются на пять минут или более.
Решение
Убедитесь, что время локальной системы и время сервера синхронизированы. Дополнительные сведения о том, как это сделать, см. в примере How to configure an authoritative time server in Windows Server.
Остались вопросы? Перейдите в microsoft Community или Microsoft Q &A.
OK | OK | Нет | Решение зачтено | Программа верно работает на соответствующем наборе тестов |
Compilation error | CE | Нет | Компиляция программы завершилась с ошибкой | 1. в программе допущена синтаксическая или семантическая ошибка 2. неправильно указан язык |
Wrong answer | WA | Да | Ответ неверен | 1. ошибка в программе 2. неверный алгоритм |
Presentation error | PE | Да | Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи | 1. неверный формат вывода 2. программа не печатает результат 3. лишний вывод |
Time-limit exceeded | TL | Да | Программа превысила установленный лимит времени | 1. ошибка в программе 2. неэффективное решение |
Memory limit exceeded | ML | Да | Программа превысила установленный в условиях лимит памяти | 1. ошибка в программе (например, бесконечная рекурсия) 2. неэффективное решение |
Output limit exceeded | OL | Да | Программа превысила установленный в условиях лимит вывода | 1. программа выводит больше информации, чем установлено в ограничениях |
Run-time error | RE | Да | Программа завершила работу с ненулевым кодом возврата | 1. ошибка выполнения 2. программа на C или C++ не завершается оператором return 0 3. ненулевой код возврата указан явно 4. Программа на Java описана в пакете |
Precompile check failed | PCF | Нет | Программа не прошла проверку на качество кода перед компиляцией | 1. плохое качество кода 2. неправильно отформатированный код |
Idleness limit exceeded | IL | Да | Программа слишком долго не отвечала на запросы системы и не выполняла действий | 1. программа ожидает ввода с консоли, которого не должно быть 2. не использован flush() |
400 Неверный запрос — pkg.go.dev
Черные жизни имеют значение
Поддержите Инициативу равного правосудия- Зачем идти
- Начать
- Документы
- Пакеты
- Играть
- Блог
- Зачем идти
- Начать
- Пакеты
- Блог
«errors # section-documentation» не является допустимым путем импорта
Зачем идти Случаи применения Примеры из практики Начать Детская площадка Тур Переполнение стека Пакеты О Скачать Блог Трекер проблем Примечания к выпуску Руководство по бренду Нормы поведения Соединять Твиттер GitHub Слабина Reddit Встреча Golang Weekly- авторское право
- условия обслуживания
- Политика конфиденциальности
- Сообщить о проблеме
- голанг.орг
400 Неверный запрос — pkg.go.dev
Черные жизни имеют значение
Поддержите Инициативу равного правосудия- Зачем идти
- Начать
- Документы
- Пакеты
- Играть
- Блог
- Зачем идти
- Начать
- Пакеты
- Блог
«errors # pkg-overview» не является допустимым путем импорта
Зачем идти Случаи применения Примеры из практики Начать Детская площадка Тур Переполнение стека Пакеты О Скачать Блог Трекер проблем Примечания к выпуску Руководство по бренду Нормы поведения Соединять Твиттер GitHub Слабина Reddit Встреча Golang Weekly- авторское право
- условия обслуживания
- Политика конфиденциальности
- Сообщить о проблеме
- голанг.орг
Error () — JavaScript | MDN
Конструктор Error
создает объект ошибки.
новая ошибка ()
новая ошибка (сообщение)
новая ошибка (сообщение, параметры)
новая ошибка (сообщение, параметры, имя файла)
новая ошибка (сообщение, параметры, имя файла, номер строки)
Параметры
-
сообщение
Дополнительно Описание ошибки в удобочитаемом виде.
-
опции
Дополнительно Объект со следующими свойствами:
-
причина
Дополнительно Свойство, указывающее конкретную причину ошибки. При перехвате и повторной выдаче ошибки с более конкретным или полезным сообщением об ошибке это свойство следует использовать для передачи исходной ошибки.
-
-
имя файла
Необязательно Значение свойства
fileName
для созданного объектаError
.По умолчанию используется имя файла, содержащего код, который называется конструкторомError ()
.-
lineNumber
Дополнительно Значение свойства
lineNumber
в созданном объектеError
. По умолчанию используется номер строки, содержащей вызов конструктораError ()
.
Вызов функции или новое строительство
Когда Error
используется как функция — без new
он вернет объект Error
.Следовательно, простой вызов Error
приведет к тому же результату, что и создание объекта Error
с помощью ключевого слова new
.
const x = Error ('Я был создан с помощью вызова функции!')
const y = new Error ('Я был создан с помощью ключевого слова "new"!')
Повторное отображение ошибки с причиной
Иногда бывает полезно поймать ошибку и повторно выбросить ее с новым сообщением.
В этом случае вы должны передать исходную ошибку в конструктор для новой ошибки Error
, как показано.
try {
frameworkThatCanThrow ();
} catch (err) {
выбросить новую ошибку ('Новое сообщение об ошибке', {причина: ошибка});
}
Более подробный пример см. В разделе «Ошибка»> «Как отличить похожие ошибки».
Таблицы BCD загружаются только в браузере
Границы ошибок — React
В прошлом ошибки JavaScript внутри компонентов использовались для повреждения внутреннего состояния React и вызывания загадочных ошибок при следующих отрисовках. Эти ошибки всегда были вызваны более ранней ошибкой в коде приложения, но React не предоставлял способ корректно обрабатывать их в компонентах и не мог исправить их.
Введение в границы ошибок
Ошибка JavaScript в части пользовательского интерфейса не должна нарушать работу всего приложения. Чтобы решить эту проблему для пользователей React, React 16 вводит новую концепцию «границы ошибки».
Границы ошибок— это компоненты React, которые перехватывают ошибки JavaScript в любом месте своего дочернего дерева компонентов, регистрируют эти ошибки и отображают резервный пользовательский интерфейс вместо дерева компонентов, в котором произошел сбой. Границы ошибок улавливают ошибки во время рендеринга, в методах жизненного цикла и в конструкторах всего дерева под ними.
Примечание
Границы ошибок до , а не , перехватывают ошибки для:
- Обработчики событий (подробнее)
- Асинхронный код (например,
setTimeout
илиобратные вызовы requestAnimationFrame
)- Рендеринг на стороне сервера
- Ошибки, возникающие в самой границе ошибки (а не в ее дочерних элементах)
Компонент класса становится границей ошибки, если он определяет один (или оба) из методов жизненного цикла static getDerivedStateFromError ()
или componentDidCatch ()
.Используйте static getDerivedStateFromError ()
для рендеринга резервного пользовательского интерфейса после возникновения ошибки. Используйте componentDidCatch ()
для регистрации информации об ошибках.
class ErrorBoundary расширяет React.Component {
конструктор (реквизит) {
супер (реквизит);
this.state = {hasError: false};
}
статический getDerivedStateFromError (ошибка) {return {hasError: true}; }
componentDidCatch (error, errorInfo) {logErrorToMyService (error, errorInfo); }
оказывать() {
если это.state.hasError) {return Что-то пошло не так
; }
вернуть this.props.children;
}
}
Тогда вы можете использовать его как обычный компонент:
<граница ошибки>
Границы ошибки работают как блок JavaScript catch {}
, но для компонентов. Границами ошибки могут быть только компоненты класса. На практике в большинстве случаев вам нужно объявить компонент границы ошибки один раз и использовать его во всем приложении.
Обратите внимание, что границы ошибок улавливают только ошибки в компонентах ниже них в дереве . Граница ошибки не может уловить ошибку внутри себя. Если граница ошибки не удалась при попытке отобразить сообщение об ошибке, ошибка будет распространяться на ближайшую границу ошибки над ней. Это тоже похоже на то, как блок catch {} работает в JavaScript.
Живая демонстрация
Посмотрите этот пример объявления и использования границы ошибки в React 16.
Где ставить границы ошибок
Степень детализации границ ошибок зависит от вас.Вы можете обернуть компоненты маршрута верхнего уровня, чтобы отобразить сообщение «Что-то пошло не так» для пользователя, точно так же, как серверные фреймворки часто обрабатывают сбои. Вы также можете заключить отдельные виджеты в границу ошибки, чтобы защитить их от сбоя остальной части приложения.
Новое поведение при обнаружении неперехваченных ошибок
Это изменение имеет важное значение. Начиная с React 16, ошибки, которые не были обнаружены какой-либо границей ошибок, приведут к отключению всего дерева компонентов React.
Мы обсуждали это решение, но, по нашему опыту, хуже оставить поврежденный пользовательский интерфейс на месте, чем полностью удалить его. Например, в таком продукте, как Messenger, оставление поврежденного пользовательского интерфейса видимым может привести к тому, что кто-то отправит сообщение не тому человеку. Точно так же для платежного приложения хуже отображать неправильную сумму, чем ничего не отображать.
Это изменение означает, что при переходе на React 16 вы, скорее всего, обнаружите существующие сбои в вашем приложении, которые раньше были незамеченными.Добавление границ ошибок позволяет улучшить взаимодействие с пользователем, когда что-то пойдет не так.
Например, Facebook Messenger помещает содержимое боковой панели, информационной панели, журнала разговоров и ввода сообщения в отдельные границы ошибок. Если какой-то компонент в одной из этих областей пользовательского интерфейса выходит из строя, остальные остаются интерактивными.
Мы также рекомендуем вам использовать службы отчетов об ошибках JS (или создать свои собственные), чтобы вы могли узнавать о необработанных исключениях, когда они происходят в производственной среде, и исправлять их.
Трассы стека компонентов
React 16 печатает все ошибки, которые произошли во время рендеринга на консоль в разработке, даже если приложение случайно их проглотит. Помимо сообщения об ошибке и стека JavaScript, он также предоставляет трассировку стека компонентов. Теперь вы можете увидеть, где именно в дереве компонентов произошел сбой:
Вы также можете увидеть имена файлов и номера строк в трассировке стека компонентов. По умолчанию это работает в проектах Create React App:
.Если вы не используете приложение Create React, вы можете вручную добавить этот плагин в конфигурацию Babel.Обратите внимание, что он предназначен только для разработки, и необходимо отключить в производственной среде .
Примечание
Имена компонентов, отображаемые в трассировке стека, зависят от свойства
Function.name
. Если вы поддерживаете старые браузеры и устройства, которые могут еще не обеспечивать это изначально (например, IE 11), подумайте о включении полифилаFunction.name
в ваше связанное приложение, напримерfunction.name-polyfill
. В качестве альтернативы вы можете явно установить свойствоdisplayName
для всех ваших компонентов.
Как насчет попробовать / поймать?
попробуйте
/ catch
отлично, но работает только для императивного кода:
try {
showButton ();
} catch (ошибка) {
}
Однако компоненты React декларативны и указывают , что должно быть отображено :
Границы ошибок сохраняют декларативный характер React и ведут себя так, как и следовало ожидать. Например, даже если в методе componentDidUpdate
возникает ошибка, вызванная набором setState
где-то глубоко в дереве, она все равно будет правильно распространяться до ближайшей границы ошибки.
Как насчет обработчиков событий?
Границы ошибок не обнаруживают ошибок внутри обработчиков событий.
React не требует границ ошибок для восстановления после ошибок в обработчиках событий. В отличие от метода рендеринга и методов жизненного цикла, обработчики событий не выполняются во время рендеринга. Так что, если они бросят, React все равно знает, что отображать на экране.
Если вам нужно поймать ошибку внутри обработчика событий, используйте обычный JavaScript try
/ catch
оператор:
Класс MyComponent расширяет React.Составная часть {
конструктор (реквизит) {
супер (реквизит);
this.state = {ошибка: нуль};
this.handleClick = this.handleClick.bind (это);
}
handleClick () {
попробуйте {} catch (error) {this.setState ({error}); }}
оказывать() {
if (this.state.error) {return Обнаружена ошибка.
} return }
}
Обратите внимание, что приведенный выше пример демонстрирует обычное поведение JavaScript и не использует границы ошибок.
Изменения именования по сравнению с React 15
React 15 включал очень ограниченную поддержку границ ошибок под другим именем метода: unstable_handleError
. Этот метод больше не работает, и вам нужно будет изменить его на componentDidCatch
в вашем коде, начиная с первой бета-версии 16.
Для этого изменения мы предоставили codemod для автоматического переноса вашего кода.
Сообщения об ошибках | Maps JavaScript API | Разработчики Google
На этой странице описаны сообщения об ошибках, которые могут быть возвращены Maps JavaScript API.Maps JavaScript API пишет сообщения об ошибках и предупреждения в консоли JavaScript. Определенная ошибка также могут возникать условия, в результате которых на дисплее отображается затемненный карта с водяными знаками.
Если вы НЕ являетесь владельцем веб-сайта, вы не выполняете никаких действий. можно предпринять, чтобы исправить любую из этих ошибок. Однако вы можете уведомить сайт собственник, если возможно.Ключ API и ошибки биллинга
Поиск и устранение неисправностей
При определенных обстоятельствах затемненная карта или «негативное» изображение просмотра улиц с водяными знаками с текстом «только для разработки», может отображаться.Такое поведение обычно указывает на проблемы с ключом API или выставлением счетов. Чтобы использовать продукты Google Maps Platform, в вашей учетной записи должен быть включен биллинг, и все запросы должны включать действительный ключ API. Следующая последовательность действий поможет вам устранить проблему.
Вы используете ключ API?
Я не уверен. Как я могу проверить, использую ли я ключ API?
Ключ API передается как параметр ключа
в URL-адресе, который используется для загрузки
Maps JavaScript API.Вот несколько вариантов, чтобы проверить, используете ли вы ключ API:
- Использовать Расширение Google Maps Platform API Checker для Chrome. Это позволяет определить, есть ли у вас веб-сайт правильно реализует лицензированные API Карт Google.
- Если вы используете библиотеку или подключаемый модуль для загрузки Maps JavaScript API, проверьте настройки этой библиотеки и найдите параметр ключа API.
- Проверьте ошибки в вашем браузере. Если вы видите следующие сообщения, вы неправильно используете свой ключ API:
Для веб-разработчиков:
Нет, я не использую ключ API.
Чтобы получить ключ API, нажмите кнопку ниже. Если вы не видите пошаговую настройку, следуйте
полные инструкции по началу работы с Google Maps
Платформа.
Начать
Да, я использую ключ API.
Отлично! Давайте продолжим и проверим, привязан ли к вашему проекту платежный аккаунт.
Привязан ли к вашему проекту платежный аккаунт?
Я не уверен. Как я могу проверить, привязан ли к моему проекту платежный аккаунт?
Перейти к На странице биллинга в Google Cloud Console выберите проект, для которого был создан ваш ключ API.Для подтверждения, что ключ связан с проектом:
- Перейдите в раздел Учетные данные , к которому можно получить доступ из левой боковой панели под Платформа Google Maps> Учетные данные .
- Убедитесь, что в списке указан ключ API, который вы в настоящее время используете на своем веб-сайте. Если это не так, переключитесь на другой проект и проверьте там учетные данные.
- Если вы не можете найти проект для своего ключа API, возможно, вы потеряли доступ к этому проекту.Обратитесь за помощью к другим сотрудникам вашей организации. Если исходный проект найти не удается, вам следует:
- Создайте новый проект. Это можно сделать, выбрав New Project . из списка проектов или выбрав Create Project через Страница диспетчера ресурсов.
- Создайте новый ключ API. Это можно сделать на странице Credentials . После этого нажмите Создать учетные данные , а затем выберите API-ключ .
После того, как вы разместили свой проект в облачной консоли, проверьте, прикреплен ли платежный аккаунт, перейдя в раздел «Биллинг» в меню слева.
Нет, к моему проекту не привязан платежный аккаунт.
Перейдите на страницу включения биллинга в облачной консоли. и добавьте в свой проект учетную запись для выставления счетов. Для получения дополнительной информации см. Начните работу с Google Maps Platform.
Да, к моему проекту привязан платежный аккаунт.
Отлично! Убедитесь, что указанный способ оплаты действителен.
Предоставленный способ выставления счетов больше не действителен (например, кредитная карта с истекшим сроком действия)?
Вы может добавлять, удалять или обновлять способ оплаты в Cloud Console.
Существует ли превышенный ежедневный лимит для API?
Если вы установили дневной лимит для любого из ваших API, что является обычным делом для предотвращения неожиданного увеличения, вы можете решить эту проблему, увеличив дневной лимит.
Вы можете проверить свои дневные лимиты, перейдя в Панель управления API и службами в Облачная консоль. Оказавшись там:
- Выберите проект, если будет предложено.
- Выберите API из списка, затем щелкните вкладку Quotas .
Есть ли у вашего ключа API ограничение IP-адресов?
API-ключис ограничением IP-адресов можно использовать только с веб-службами, которые предназначен для использования на стороне сервера (например, API геокодирования и другие API веб-служб).Большинство этих веб-служб имеют эквивалентные службы в JavaScript API Карт (например, см. Сервис геокодирования). Чтобы использовать клиентские службы JavaScript API Карт, вам необходимо создать отдельный ключ API, который можно защитить с помощью HTTP-рефереров ограничение (см. Получить, добавить и ограничить ключ API).
Для получения помощи по поиску сообщений об ошибках см. Раздел о проверке ошибок в вашем браузере.
Коды ошибок Maps JavaScript API для разработчиков и владельцев сайтов
В следующих таблицах перечислены возможные коды ошибок, возвращаемые Maps JavaScript API с описанием причины и способов решить проблему.Для получения помощи по поиску сообщений об ошибках см. Раздел проверка ошибок в вашем браузере.
Ошибки загрузки карты
Если вы столкнулись с ошибкой при загрузке JavaScript API Карт, Пожалуйста, обратитесь к таблице ниже, чтобы найти объяснения кодов ошибок.
Код ошибки | Сообщение | Описание |
---|---|---|
NotLoadingAPIFromGoogleMapsError | Maps JavaScript API должен быть загружен непосредственно с Google серверы. | Элемент скрипта, который загружает API JavaScript Карт: некорректно размещены на вашей странице. Чтобы API работал правильно, он должен быть загружен прямо с https://maps.googleapis.com. См. Загрузка JavaScript API Карт. |
TOSViolationMapError | Этот веб-сайт, по всей видимости, нарушает Условия использования API Карт Google.Для этого веб-сайта отключен API Карт Google. | Ваша заявка заблокирована за несоблюдение Условия использования платформы Google Maps после нескольких уведомлений по электронной почте. Чтобы обжаловать заблокировать и передать на рассмотрение вашу реализацию, заполните эта форма. Вы получите ответ по электронной почте в течение нескольких рабочих дней. Если у вас есть лицензия на премиум-план платформы Google Maps, используйте свой Учетные данные Google Maps Platform Premium Plan для устранения этой ошибки.См. Руководство по Аутентификация премиум-плана. |
UnauthorizedURLForClientIdMapError | Этот URL не авторизован для использования предоставленного идентификатора клиента Google Maps. | Премиум-план или API Карт для работы ID клиента, включенный в загрузку скрипта, недействителен, истек или текущий адрес, загружающий Maps JavaScript API не добавлен в список авторизованные URL. См. Регистрация авторизованных URL-адресов. |
Коды ошибок API JavaScript Карт
Если вы обнаружили ошибку в Chrome JavaScript Консоль, Firefox Веб-консоль или любые другие аналогичные инструменты в ваших браузерах, Пожалуйста, обратитесь к таблице ниже, чтобы найти объяснения кодов ошибок.
Maps JavaScript API возвращает как ошибки, так и предупреждения. Ошибка указывает на серьезную проблему, возникшую при загрузке Maps JavaScript API.Ваша страница не может правильно загрузить API, и API не будет работать на этой странице. Предупреждение — это дополнительное сообщение о загрузке Maps JavaScript API. В предупреждении описаны возможные причины для ошибки или предлагает потенциальные проблемы в вашем коде, который загружает Maps JavaScript API. Если вы получаете только предупреждения без ошибок, API будет работать правильно на этой странице. Однако мы рекомендуем исправить эти потенциальные вопросы тоже.
Код ошибки разработчика | Тип | Описание |
---|---|---|
ApiNotActivatedMapError | Ошибка | API Карт JavaScript не активирован в вашем проекте API.Возможно, вам потребуется включить JavaScript API Карт в разделе API в Консоль Google Cloud. Чтобы активировать JavaScript API Карт для вашего проекта, нажмите кнопку ниже. |
ApiTargetBlockedMapError | Ошибка | Этот ключ API не авторизован для использования этой службы или API. пожалуйста, проверьте ограничения API Настройки вашего ключа API в Google Cloud Console, чтобы гарантировать, что все API и сервисы, которые вам нужны для использования правильно указаны в списке включенных API. См. Ключи API в Cloud Console. Для получения дополнительной информации см. Лучшие практики безопасности API. |
DeletedApiProjectMapError | Ошибка | Возможно, ваш проект API был удален из Cloud Console. Пожалуйста, проверьте проект, для которого вы сгенерировали ключ API, включен в загрузчик JavaScript API. Вы можете создать новый проект API и получить новый ключ в Cloud Console. Чтобы создать новый проект и получить ключ API для проекта, нажмите кнопку ниже. |
ClientBillingNotEnabledMapError | Ошибка | Вы не включили выставление счетов для своего проекта. Вы должны включить биллинг в Google Cloud Проект, связанный с этим идентификатором клиента, здесь. |
BillingNotEnabledMapError | Ошибка | Вы не включили выставление счетов для своего проекта, что вызывает эту ошибку.Вы должны включить биллинг в Google Cloud Project здесь. Узнать больше |
ExpiredKeyMapError | Ошибка | Ключ API, включенный в элемент скрипта, который загружает API, имеет истек или не распознается системой. Вы можете получить эту ошибку после создания новый ключ API, если вы попытаетесь использовать ключ до того, как он будет распознан системой.Подождите несколько минут и попробуйте еще раз, или вам может потребоваться сгенерировать новый ключ API в Облачная консоль. Чтобы получить ключ API, нажмите кнопку ниже. |
InvalidClientIdMapError | Ошибка | Идентификатор клиента, включенный в элемент скрипта, который загружает API, — недействителен или просрочен. Убедитесь, что вы используете свой идентификатор клиента правильно.Идентификатор клиента должен начинаться с префикса «gme-». Если ты видишь эта ошибка даже при правильном использовании вашего идентификатора клиента, идентификатор клиента может истек. Обратитесь к менеджеру своего аккаунта Google. Если у вас нет премиум-плана или
Лицензия Maps APIs for Work, вам необходимо использовать См. Руководство по Аутентификация премиум-плана. |
InvalidKeyMapError | Ошибка | Ключ API, включенный в элемент скрипта, который загружает API, не нашел. Убедитесь, что вы используете правильный ключ API. Вы можете сгенерируйте новый ключ API в Cloud Console. Чтобы получить ключ API, нажмите кнопку ниже. |
MalformedCredentialsMapError | Ошибка | Ваше приложение использует неподдерживаемую схему URI.Убедитесь, что приложение использует допустимый формат URI, как определено в RFC 3986. |
Ошибка MissingKeyMapError | Ошибка | В элементе скрипта, который загружает API, отсутствует требуемый параметр аутентификации. Если вы используете стандартный JavaScript API Карт, то вы должны использовать
ключ Если вы являетесь клиентом премиум-плана, вы должны
используйте либо параметр клиента Если вы НЕ являетесь владельцем веб-сайта, вы не можете предпринять никаких шагов, чтобы исправить это. ошибка. Однако вы можете захотеть уведомить владельца сайта, если это возможно. |
ProjectDeniedMapError | Ошибка | Ваш запрос не был выполнен.Вы можете найти больше подробности об ошибке в Cloud Console. См. Облачная консоль. |
RefererDeniedMapError | Ошибка | Ваша заявка заблокирована за несоблюдение Условия использования платформы Google Maps после нескольких уведомлений по электронной почте. Чтобы обжаловать заблокировать и передать на рассмотрение вашу реализацию, заполните эта форма.Вы получите ответ по электронной почте в течение нескольких рабочих дней. |
RefererNotAllowedMapError | Ошибка | Текущий URL-адрес загрузки JavaScript API Карт не был добавлен в список разрешенных рефереров. Пожалуйста, проверьте реферера настройки вашего ключа API в Cloud Console. См. API JavaScript Карт и Получите ключ API. |
OverQuotaMapError | Ошибка | Количество запросов превысило лимиты использования для Maps JavaScript API. Запросы вашего приложения снова будут работать при следующем сбросе дневной квоты. Если вы НЕ являетесь владельцем веб-сайта, вы не можете предпринять никаких шагов, чтобы исправить эту ошибку. Однако вы можете по возможности уведомить владельца сайта. Подробнее см. В руководстве по лимиты использования. На странице также объясняется, как вы можете стать выше. лимиты использования. |
ApiProjectMapError | Ошибка | Либо предоставленный ключ API, либо проект API, с которым он связан, не может быть решен. Эта ошибка может быть временной. Если это сообщение об ошибке сохраняется, вам может потребоваться получить новый ключ API или создать новый проект API. Для получения дополнительной информации см. Начните работу с Google Maps Platform. |
ClientIdLooksLikeCryptoKey | Предупреждение | Возможно, вы предоставили криптографический ключ в клиенте См. Руководство по клиент Идентификаторы для премиум-плана и Клиенты Maps API for Work. |
ClientIdLooksLikeKey | Предупреждение | Возможно, вы указали ключ API в параметре См. Руководство по Аутентификация премиум-плана. |
InvalidChannel | Предупреждение | Возможно, вы указали неверный параметр См. Отчетность | Премиум-план Google Maps Platform. |
InvalidClientId | Предупреждение | Параметр клиента См. Руководство по Аутентификация премиум-плана. |
InvalidKey | Предупреждение | Ключ API, включенный в элемент скрипта, который загружает API, не выглядишь правильно. Убедитесь, что вы используете правильный ключ API. Вы можете сгенерировать новый ключ API в Cloud Console. Чтобы получить ключ API, нажмите кнопку ниже. |
InvalidVersion | Предупреждение | Возможно, вы указали неправильный номер версии в своем элементе скрипта. Убедитесь, что вы используете правильный номер версии. См. Управление версиями | Google Maps JavaScript API. |
KeyLooksLikeClientId | Предупреждение | Возможно, вы указали идентификатор клиента в качестве параметра ключа .если ты
иметь премиум-план или
Лицензия Maps APIs for Work. Укажите свой идентификатор клиента как
Параметр клиента вместо параметра ключа . Если у тебя есть
Премиум-план Google Maps Platform, вы можете использовать параметр клиента или параметр ключа . Если у вас нет лицензий,
вы должны использовать параметр key вместо клиента параметр.См. Руководство по Аутентификация премиум-плана. |
KeyLooksLikeCryptoKey | Предупреждение | Возможно, вы предоставили криптографический ключ или секрет подписи как ключ См. Руководство по Указание идентификатор клиента при загрузке API. |
KeyLooksLikeProjectNumber | Предупреждение | Вы могли указать номер проекта в качестве ключевого параметра Узнайте, как получить ключ API. |
NoApiKeys | Предупреждение | Элемент скрипта, загружающий API, не имеет ключа API. Пожалуйста, убедитесь
вы включаете действительный ключ API в качестве параметра Чтобы получить ключ API, нажмите кнопку ниже, чтобы начать. Если вы загружаете Maps JavaScript API из устаревшей версии 2
path, вы получите предупреждение |
Пенсионная версия | Предупреждение | Возможно, вы указали устаревшую версию в своем элементе скрипта.Обновите свое приложение, чтобы использовать одну из доступных версий. См. Управление версиями | Google Maps JavaScript API. |
Датчик Не требуется | Предупреждение | Датчик |
Подпись Не требуется | Предупреждение | Параметр |
SignedInNotSupported | Предупреждение | Параметр |
UrlAuthenticationCommonError | Ошибка | Произошла ошибка, которая не попадает в другие категории на этом страница. Это могло быть вызвано временной проблемой. Пожалуйста, попробуйте еще раз запрос после небольшой задержки.Если это не решит проблему, пожалуйста обзор руководство разработчика чтобы убедиться, что запрос имеет правильный формат. |
Проверка ошибок в браузере
Maps JavaScript API записывает сообщения об ошибках в окно. Консоль
. В этом разделе объясняется, как можно проверить window.console
вывод в Google Chrome. Если вы используете какой-либо другой
браузеры, пожалуйста, проверьте документацию разработчика для вашего браузера.Для тебя
ссылка, это список инструментов для проверки вывода окна window.console
в некоторых других браузерах.
В Chrome вы можете использовать
Консоль JavaScript
для проверки вывода window.console
следующим образом.
- Чтобы открыть Инструменты разработчика, выберите значок меню> Дополнительные инструменты> Инструменты разработчика.
- Чтобы открыть консоль JavaScript, нажмите клавишу ESC на клавиатуре. Клавиша ESC переключает консоль JavaScript. Если закрыть консоль, нажмите клавишу ESC еще раз, чтобы открыть его.
Если при загрузке Maps JavaScript API, они отображаются в виде одной или нескольких строк в консоль. Сообщение об ошибке или предупреждении имеет следующий формат:
Ошибка API Карт Google: [КОД ОШИБКИ] [Ссылка на документ API]
или
Предупреждение API Карт Google: [КОД ОШИБКИ] [Ссылка на документ API]
Вы можете проверить приведенную выше таблицу кодов ошибок, чтобы найти код ошибки в сообщении об ошибке. Вы также можете найти подробную информацию о сообщение об ошибке в документе API, ссылка на который есть в сообщении.
Примечание: Вы можете прослушивать ошибки аутентификации программно.
Работа с неподдерживаемыми браузерами
Убедитесь, что версия используемого вами браузера в настоящее время поддерживается Maps JavaScript API.
Если ваш код по-прежнему не работает
Брендан Кенни и Мано Маркс обращают внимание на то, чтобы помочь вам подготовить и запустить код карт. некоторые типичные ошибки и способы их исправления в этом видео.
- Ищите опечатки.Помните, что в JavaScript учитывается регистр язык.
- Ознакомьтесь с основными сведениями — некоторые из наиболее распространенных проблем возникают с
первоначальное создание карты. Такие как:
- Подтвердите, что вы указали масштаб
центрируют
объектов на вашей карте параметры. - Убедитесь, что вы объявили элемент div, в котором карта будет появляются на экране.
- Убедитесь, что элемент div для карты имеет высоту.По умолчанию, элементы div создаются с высотой 0 и поэтому невидимый.
- Подтвердите, что вы указали масштаб
- Используйте отладчик JavaScript, чтобы выявить проблемы, например, доступную в Chrome Инструменты разработчика. Начните с поиска ошибок в консоли JavaScript.
- Размещать вопросы в стеке Переполнение. Рекомендации о том, как публиковать интересные вопросы, доступны на страницу поддержки.
Мы не можем найти эту страницу
(* {{l10n_strings.REQUIRED_FIELD}})
{{l10n_strings.CREATE_NEW_COLLECTION}} *
{{l10n_strings.ADD_COLLECTION_DESCRIPTION}}
{{l10n_strings.COLLECTION_DESCRIPTION}} {{addToCollection.description.length}} / 500 {{l10n_strings.TAGS}} {{$ item}} {{l10n_strings.PRODUCTS}} {{l10n_strings.DRAG_TEXT}}{{l10n_strings.DRAG_TEXT_HELP}}
{{l10n_strings.ЯЗЫК}} {{$ select.selected.display}}{{article.content_lang.display}}
{{l10n_strings.AUTHOR}}{{l10n_strings.AUTHOR_TOOLTIP_TEXT}}
{{$ select.selected.display}} {{l10n_strings.CREATE_AND_ADD_TO_COLLECTION_MODAL_BUTTON}} {{l10n_strings.CREATE_A_COLLECTION_ERROR}}Как реализовать обработку ошибок в SQL Server
Обзор обработки ошибок
Обработка ошибок в SQL Server дает нам контроль над кодом Transact-SQL.Например, когда что-то идет не так, у нас есть шанс что-то с этим сделать и, возможно, исправить это снова. Обработка ошибок SQL Server может быть такой же простой, как просто регистрация того, что что-то произошло, или это может быть наша попытка исправить ошибку. Он может даже переводить ошибку на язык SQL, потому что все мы знаем, как технические сообщения об ошибках SQL Server могут стать бессмысленными и трудными для понимания. К счастью, у нас есть шанс преобразовать эти сообщения в нечто более значимое, чтобы передать их пользователям, разработчикам и т. Д.
В этой статье мы более подробно рассмотрим оператор TRY… CATCH: синтаксис, как он выглядит, как работает и что можно сделать при возникновении ошибки. Кроме того, метод будет объяснен на примере SQL Server с использованием группы операторов / блоков T-SQL, которые, по сути, являются способом обработки ошибок SQL Server. Это очень простой, но структурированный способ сделать это, и как только вы освоите его, во многих случаях он может оказаться весьма полезным.
Вдобавок ко всему существует функция RAISERROR, которую можно использовать для создания наших собственных сообщений об ошибках, что является отличным способом перевести запутанные сообщения об ошибках в нечто более значимое, понятное людям.
Обработка ошибок с помощью TRY… CATCH
Вот как выглядит синтаксис. Разобраться в этом довольно просто. У нас есть два блока кода:
BEGIN TRY — код для попытки END TRY BEGIN CATCH — код для запуска при возникновении ошибки — создается при попытке END CATCH |
Все, что находится между BEGIN TRY и END TRY, — это код, который мы хотим отслеживать на предмет ошибок.Таким образом, если бы внутри этого оператора TRY произошла ошибка, элемент управления сразу же был бы передан оператору CATCH, а затем он начал бы выполнение кода построчно.
Теперь внутри оператора CATCH мы можем попытаться исправить ошибку, сообщить об ошибке или даже зарегистрировать ошибку, чтобы мы знали, когда это произошло, кто это сделал, зарегистрировав имя пользователя и все полезные вещи. У нас даже есть доступ к некоторым специальным данным, доступным только внутри оператора CATCH:
- ERROR_NUMBER — возвращает внутренний номер ошибки.
- ERROR_STATE — возвращает информацию об источнике.
- ERROR_SEVERITY — Возвращает информацию обо всем, от информационных ошибок до ошибок, которые пользователь DBA может исправить, и т. Д.
- ERROR_LINE — возвращает номер строки, в которой произошла ошибка.
- ERROR_PROCEDURE — возвращает имя хранимой процедуры или функции.
- ERROR_MESSAGE — возвращает наиболее важную информацию, а именно текст сообщения об ошибке.
Это все, что нужно, когда дело доходит до обработки ошибок SQL Server. Все можно сделать с помощью простых операторов TRY и CATCH, и единственная часть, где это может быть сложно, — это когда мы имеем дело с транзакциями.Почему? Потому что, если есть BEGIN TRANSACTION, она всегда должна заканчиваться транзакцией COMMIT или ROLLBACK. Проблема в том, что ошибка возникает после того, как мы начали, но до того, как мы зафиксируем или откатимся. В этом конкретном случае в операторе CATCH можно использовать специальную функцию, которая позволяет проверять, находится ли транзакция в состоянии фиксации или нет, что затем позволяет нам принять решение об откате или фиксации.
Давайте перейдем к SQL Server Management Studio (SSMS) и начнем с основ обработки ошибок SQL Server.В статье используется образец базы данных AdventureWorks 2014. Приведенный ниже сценарий максимально прост:
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 14 18 19 | USE AdventureWorks2014 GO — Базовый пример TRY…CATCH BEGIN TRY — генерировать ошибку деления на ноль SELECT 1/0 AS Error; END TRY BEGIN CATCH SELECT ERROR_NUMBER () AS ErrorNumber, ERROR_STATE () AS ErrorState, ERROR_SEVERITY () AS ErrorSeverity, ErrorProced Error_PROced ( 9000_SERRINE) ,ERROR_MESSAGE () AS ErrorMessage; КОНЦЕВОЙ ЗАХВАТ; ГО |
Это пример того, как это выглядит и как работает.Единственное, что мы делаем в BEGIN TRY, — это делим 1 на 0, что, конечно же, вызовет ошибку. Итак, как только этот блок кода будет обнаружен, он передаст управление блоку CATCH, а затем выберет все свойства с помощью встроенных функций, о которых мы упоминали ранее. Если мы выполним сценарий сверху, то получим:
Мы получили две сетки результатов из-за двух операторов SELECT: первая — это 1, деленная на 0, что вызывает ошибку, а вторая — это переданный элемент управления, который фактически дал нам некоторые результаты.Слева направо мы получили ErrorNumber, ErrorState, ErrorSeverity; в этом случае нет процедуры (NULL), ErrorLine и ErrorMessage.
А теперь давайте сделаем что-нибудь более значимое. Хорошая идея — отслеживать эти ошибки. Вещи, подверженные ошибкам, в любом случае должны фиксироваться и, по крайней мере, регистрироваться. Вы также можете поместить триггеры в эти зарегистрированные таблицы и даже настроить учетную запись электронной почты и проявить немного творчества в способе уведомления людей при возникновении ошибки.
Если вы не знакомы с электронной почтой базы данных, ознакомьтесь с этой статьей для получения дополнительной информации о системе электронной почты: Как настроить почту базы данных в SQL Server
Приведенный ниже сценарий создает таблицу с именем DB_Errors , которую можно использовать для хранения данных отслеживания:
— Таблица для записи ошибок СОЗДАТЬ ТАБЛИЦУ DB_Errors (ErrorID INT IDENTITY (1, 1), UserName VARCHAR (100), ErrorNumber INT, ErrorState INT, ErrorState INT2 9000ErrorLine INT, ErrorProcedure VARCHAR (MAX), ErrorMessage VARCHAR (MAX), ErrorDateTime DATETIME) GO |
Здесь у нас есть простой столбец идентификаторов, за которым следует имя пользователя, поэтому мы знаем, кто сгенерировал ошибку, а остальное — это просто точная информация из встроенных функций, которые мы перечислили ранее.
Теперь давайте изменим настраиваемую хранимую процедуру из базы данных и поместим туда обработчик ошибок:
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 18 19 20 21 22 23 24 25 26 27 | ИЗМЕНЕНИЕ ПРОЦЕДУРЫ dbo.AddSale @employeeid INT, @productid INT, @quantity SMALLINT, @saleid UNIQUEIDENTIFIER OUTPUT AS SET @saleid = NEWID () 000 INGIN000НАЧАЛО ПРОДАЖ НАЧАЛО ПРОДАЖ ВНУТР.@saleid, @productid, @employeeid, @quantity END TRY BEGIN CATCH INSERT INTO dbo.DB_Errors VALUES (SUSER_SNAME (), ERROR_NUMBER (), ERROR_STATE (), ERROR_SEVERITY (), ERROR_SEVERITY (), ERROR0003 ( 000) ERRORESS3 ( 000) ERRORESS3 ( 000) ()); КОНЦЕВОЙ ЗАХВАТ GO |
Изменение этой хранимой процедуры просто оборачивает обработку ошибок в этом случае вокруг единственного оператора внутри хранимой процедуры.Если мы вызовем эту хранимую процедуру и передадим некоторые допустимые данные, произойдет следующее:
Оператор быстрого выбора указывает, что запись была успешно вставлена:
Однако, если мы вызовем вышеупомянутую хранимую процедуру еще раз, передав те же параметры, сетка результатов будет заполнена по-другому:
На этот раз в таблице результатов у нас есть два индикатора:
0 строк затронуло — эта строка указывает, что на самом деле ничего не попало в таблицу продаж
1 строка затронула — эта строка указывает, что что-то вошло в нашу недавно созданную таблицу журналирования
Итак, что мы можем сделать здесь, это посмотреть на таблицу ошибок и посмотреть, что произошло.Простая инструкция Select выполнит эту работу:
Здесь у нас есть вся информация, которую мы предварительно установили для регистрации, только на этот раз мы также заполнили поле процедуры и, конечно же, «дружественное» техническое сообщение SQL Server о том, что у нас есть нарушение:
Нарушение ограничения PRIMARY KEY «PK_Sales_1». Невозможно вставить повторяющийся ключ в объект «Продажи. Распродажа». Повторяющееся значение ключа — (20).
Это был очень искусственный пример, но дело в том, что в реальном мире передача неверной даты очень распространена.Например, передача идентификатора сотрудника, которого не существует, в случае, когда у нас есть внешний ключ, настроенный между таблицей продаж и таблицей сотрудников, что означает, что сотрудник должен существовать, чтобы создать новую запись в таблице продаж. Этот вариант использования вызовет нарушение ограничения внешнего ключа.
Общая идея заключается в том, чтобы ошибка не исчезла. Мы, по крайней мере, хотим сообщить человеку, что что-то пошло не так, а затем также зарегистрировать это под капотом. В реальном мире, если бы существовало приложение, полагающееся на хранимую процедуру, разработчики, вероятно, также где-нибудь закодировали бы обработку ошибок SQL Server, потому что они бы знали, когда произошла ошибка.Здесь также было бы разумно передать сообщение об ошибке пользователю / приложению. Это можно сделать, добавив функцию RAISERROR, чтобы мы могли выдать нашу собственную версию ошибки.
Например, если мы знаем, что ввод несуществующего идентификатора сотрудника более вероятен, мы можем выполнить поиск. Этот поиск может проверить, существует ли идентификатор сотрудника, а если его нет, выдать точную ошибку, которая произошла. Или, в худшем случае, если у нас возникла неожиданная ошибка, о которой мы не знали, то мы можем просто передать ее обратно.
Расширенная обработка ошибок SQL
Мы лишь вкратце упомянули сложную часть транзакций, поэтому вот простой пример того, как с ними работать. Мы можем использовать ту же процедуру, что и раньше, только на этот раз давайте обернем транзакцию вокруг оператора Insert:
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 18 19 20 21 22 23 24 25 26 27 28 29 30 000 000 34 35 36 37 | ИЗМЕНЕНИЕ ПРОЦЕДУРЫ dbo.AddSale @employeeid INT, @productid INT, @quantity SMALLINT, @saleid UNIQUEIDENTIFIER OUTPUT AS SET @saleid = NEWID () BEGIN TRY НАЧАЛО ПРОДАЖИНАЧАЛО ПРОДАЖИ НАЧАЛО НАЧАЛО ПРОДАЖ НАЧАЛО ПРОДАЖИ НАЧАЛО ПРОДАЖИ НАЧАЛО ПРОДАЖИ НАЧАЛО ПРОДАЖ SELECT @saleid, @productid, @employeeid, @quantity COMMIT TRANSACTION END TRY BEGIN CATCH INSERT INSERT INSERT INSERT INSERT.DB_Errors VALUES (SUSER_SNAME (), ERROR_NUMBER (), ERROR_STATE (), ERROR_SEVERITY (), ERROR_SEVERITY (), ERROR0003 ( 000) ERRORESS3 ( 000) ERRORESS3 ( 000) ()); — Транзакция нефиксируется IF (XACT_STATE ()) = -1 ROLLBACK TRANSACTION — Таблица принятия транзакции IF (XACT_STATE ()) = 1 CAT3CHIT END ГО |
Итак, если внутри транзакции Begin все выполняется успешно, она вставляет запись в Sales, а затем фиксирует ее.Но если что-то пойдет не так до того, как произойдет фиксация и она передаст управление нашему Catch, возникает вопрос: как мы узнаем, фиксируем ли мы или откатываем все это?
Если ошибка несерьезная и она находится в состоянии фиксации, мы все равно можем зафиксировать транзакцию. Но если что-то пошло не так и находится в нефиксируемом состоянии, мы можем откатить транзакцию. Это можно сделать, просто запустив и проанализировав функцию XACT_STATE, которая сообщает о состоянии транзакции.
Эта функция возвращает одно из следующих трех значений:
1 — транзакция фиксируется
-1 — транзакция не фиксируется и ее следует откатить
0 — незавершенных транзакций нет
Единственная загвоздка здесь — не забыть на самом деле делать это внутри оператора catch, потому что вы не хотите начинать транзакции, а затем не фиксировать или откатывать их:
Как, если мы выполним ту же хранимую процедуру, предоставив e.грамм. неверный EmployeeID , мы получим те же ошибки, что и ранее созданная наизнанку таблица:
Чтобы узнать, что это не было вставлено, выполните простой запрос Select, выбрав все из таблицы Sales , где EmployeeID — это 20 :
Создание пользовательского SQL-сообщения об ошибке подъема
Давайте подведем итоги и посмотрим, как мы можем создавать собственные сообщения об ошибках.Это хорошо, когда мы знаем, что может возникнуть возможная ситуация. Как мы упоминали ранее, возможно, кто-то передаст неверный идентификатор сотрудника. В этом конкретном случае мы можем выполнить проверку до этого и, конечно же, когда это произойдет, мы можем создать собственное сообщение, например, что идентификатор сотрудника не существует. Это можно легко сделать, еще раз изменив нашу хранимую процедуру и добавив поиск в наш блок TRY:
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 18 19 20 21 22 23 24 25 26 27 28 29 30 000 000 34 35 36 | ИЗМЕНЕНИЕ ПРОЦЕДУРЫ dbo.AddSale @employeeid INT, @productid INT, @quantity SMALLINT, @saleid UNIQUEIDENTIFIER OUTPUT AS SET @saleid = NEWID () BEGIN COUNT (IFIN 9000 TRY 9000) .Employee e WHERE employeeid = @employeeid) = 0 RAISEERROR (‘EmployeeID не существует.’, 11, 1) INSERT INTO Sales.Sales SELECT @saleid, @product @employeeid, @quantity END TRY BEGIN CATCH INSERT INTO dbo.DB_Errors VALUES (SUSER_SNAME (), ERROR_NUMBER (), ERROR_STATE (), ERROR_SEVERITY (), ERROR_SEVERITY (), ERROR0003 ( 000) ERRORESS3 ( 000) ERRORESS3 ( 000) ()); DECLARE @Message varchar (MAX) = ERROR_MESSAGE (), @Severity int = ERROR_SEVERITY (), @State smallint = ERROR_STATE () @State, @State, @State, @State, @State, @State, @State, @State, @State, @State, @State КОНЦЕВОЙ ЗАХВАТ GO |
Если счетчик возвращается как ноль, это означает, что сотрудника с таким идентификатором не существует.Затем мы можем вызвать RAISERROR, где мы определяем определяемое пользователем сообщение и, кроме того, нашу настраиваемую серьезность и состояние. Таким образом, кому-то, использующему эту хранимую процедуру, было бы намного проще понять, в чем проблема, вместо того, чтобы видеть очень техническое сообщение об ошибке, которое в данном случае выдает SQL о проверке внешнего ключа.
С последними изменениями в нашей процедуре хранения в блоке Catch появился еще один RAISERROR. Если произошла другая ошибка, мы можем снова вызвать RAISERROR и передать то, что произошло.Вот почему мы объявили все переменные и результаты всех функций. Таким образом, он не только будет зарегистрирован, но и отчитается перед приложением или пользователем.
И теперь, если мы выполним тот же код, что и раньше, он будет зарегистрирован, а также укажет, что идентификатор сотрудника не существует:
Еще одна вещь, о которой стоит упомянуть, — это то, что мы можем предопределить этот код сообщения об ошибке, серьезность и состояние. Существует хранимая процедура sp_addmessage, которая используется для добавления наших собственных сообщений об ошибках.Это полезно, когда нам нужно вызвать сообщение в нескольких местах; мы можем просто использовать RAISERROR и передать номер сообщения, а не набирать все заново. Выполнив выбранный ниже код, мы добавили эту ошибку в SQL Server:
Это означает, что теперь, вместо того, чтобы делать это так, как мы делали раньше, мы можем просто вызвать RAISERROR и передать номер ошибки, и вот как это выглядит:
Конечно, процедура sp_dropmessage используется для удаления указанного пользователем сообщения об ошибке.Мы также можем просмотреть все сообщения в SQL Server, выполнив запрос снизу:
ВЫБРАТЬ * ИЗ master.dbo.sysmessages |
Их много, и вы можете увидеть наше пользовательское сообщение SQL об ошибке повышения в самом верху.
Я надеюсь, что эта статья была для вас информативной, и благодарю вас за то, что вы ее прочитали.
Список литературы
Боян, он же «Бокси», выпускник AP в области ИТ-технологий, специализирующийся на сетях и электронных технологиях Копенгагенской школы дизайна и технологий, является аналитиком программного обеспечения с опытом в области обеспечения качества, поддержки программного обеспечения, пропаганды продуктов и взаимодействия с пользователями.Он много писал о SQL Shack и ApexSQL Solution Center по самым разным темам, от клиентских технологий, таких как разрешение 4K и тематика, обработки ошибок до стратегий индексации и мониторинга производительности.
Боян работает в ApexSQL в Нише, Сербия, как неотъемлемая часть команды, занимающейся проектированием, разработкой и тестированием следующего поколения инструментов баз данных, включая MySQL и SQL Server, а также автономных инструментов и интеграции с Visual Studio, SSMS.