среда, 1 сентября 2010 г.

Настройка сервера apache для работы с веб-клиентом 1С 8.2 (файловый вариант)


Перед прочтением статьи необходимо обязательно ознакомиться со следующими двумя пунктами: 1. Одно из распространенных заблуждений о веб-клиенте, это мнение, что веб-клиент - программа, которую необходимо запускать на клиентском компьютере для доступа к базе данных. Это не так. Такая программа существует, но она называется "Тонкий клиент". "Веб-клиент" - это функционал, встроенный в ПЛАТФОРМУ 1С:Предприятие 8, которая установлена на СЕРВЕРЕ, а не на клиентском ПК, позволяющий работать с БД через браузер или тонкий клиент. 2. Веб-клиент реализован в платформе 8.2.8.256, на более младших версиях платформы запустить его не получится!



* * *
Первое, что хочет сделать программист, установивший на своем компьютере управляемое приложение - это посмотреть в действии на управляемые формы. Когда же специалист наконец "наиграется" с окошками, свободно перемещаемыми вне основного окна тонкого клиента, возникает вполне объяснимое желание посмотреть, как же выглядит в реале тот самый веб-клиент, о котором уже столько говорят в программерских кругах. И вот тут появляются первые жертвы "цифрового индейца": настроить веб-сервер "apache" получается не у каждого. На самом деле ничего сложного в процессе настройки сервера нет, просто есть некоторые особенности, о которых будет рассказано в данной статье. Но начнем мы традиционно с теории, потому что специалист должен понимать, что и зачем он делает, а не просто выполнять рекомендации из мануалов. Специалисты в области веб-программирования могут ее, теорию, пропустить, остальным же я рекомендую с ней ознакомиться, чтобы понять логику работы веб-сервера. Понимание логики работы ОЧЕНЬ помогает при поиске причин отказов и ошибок в работе веб-сервера. НАЧАЛО ТЕОРИИ... Возьмем для примера вот эту самую страницу, которую ты сейчас читаешь. Она состоит из текста, уникального для каждой из страниц сайта, а также некоторых участков, одинаковых для всех страниц. Например, главное меню везде одинаково. А раз так, то лучше вынести его в отдельный модуль, а в самой странице оставить ссылку для вызова этого модуля. Я так и сделал, судя про скриншоту шаблона страницы:
Строка "" приказывает веб-серверу выполнить инструкции на языке PHP, размещенные в файле "php/pl_u.php". Предположим, что модуль обработки кода PHP пока не установлен и не настроен. Что происходит в этот момент на клиентском компьютере и сервере видно на иллюстрации № 1:
1. Клиент посылает серверу запрос в виде строки "/82webserver.php". 2. Веб-сервер воспринимает этот запрос как команду "Взять содержимое файла "82webserver.php", принадлежащего сайту "1200000dollars.ru", сформировать из этого содержимого HTML-страницу и вернуть ее клиенту". 3. Все идет хорошо, пока веб-сервер не встречает незнакомую для него инструкцию: "". Как и программист, встретивший что-то незнакомое, сервер обращается за помощью. Помощь для сервера - это его настройки (для веб-сервера "apache" это файл "httpd.conf", который находится в подкаталоге "conf" директории, в которую был установлен веб-сервер). Веб-сервер не находит в настройках ничего, связанного с тегом "". А по традиции веб-серверы проектируются так, что при встрече чего-то незнакомого они это незнакомое попросту игнорируют, не возвращая сообщения об ошибке. 4. В итоге сервер возвращает клиенту текст файла "82webserver.php" безо всякого форматирования. Нас это, естесственно, не устраивает, поэтому на сервер (имеется в виду компьютер-сервер) устанавливается модуль обработки кода на языке PHP. Не буду лить воду и тратить твое и свое время - сама по себе установка ничего не даст, потому что веб-сервер по-прежнему ничего об этом модуле не знает. Как же его "научить" узнавать код PHP и направлять соответствующие запросы PHP-модулю? Правильно - написать об этом в "помощи", конфигурационном файле "httpd.conf". Файл настроек "httpd.conf" является обычным текстовым файлом с измененным расширением. Он поделен на секции. Необходимые изменения делаются в самой первой секции - "Global Environment", в которую необходимо добавить 4 строки:
В этих строках указывается путь к модулю обработки кода PHP "php5apache2.dll", определяется новый тип страниц, содержащих код на языке PHP и запоминается путь к каталогу, в который был установлен дистрибутив языка PHP. Попробуем снова запустить браузер и ввести в поле ввода путь к нужной странице. Что теперь произойдет на сервере показано ниже на иллюстрации № 2:
1. Клиент посылает серверу запрос в виде строки "/82webserver.php". 2. Веб-сервер обращается к файлу "82webserver.php", считывает его содержимое и начинает исполнять содержащиеся в нем инструкции. 3. Веб-сервер встречает незнакомую инструкцию, обращается к файлу настроек и находит в нем информацию, что в инструкции содержится команда запустить модуль обработки кода PHP, передать ему необходимые данные и дождаться результата исполнения запроса. 4. Модуль обрабатывает данные и возвращает результат в виде HTML-кода. 5. Полученный HTML-код сервер использует для формирования HTML-страницы. 6. Сформированная HTML-страница возвращается клиенту. Итак, ожидаемый результат получен. Что нам необходимо было сделать для этого? Не так уж и много: 1. Научить веб-сервер отличать страницы с PHP кодом от обычных страниц. 2. Указать веб-серверу путь к модулю обработки кода на языке PHP. Спрашиватеся: для чего я здесь, в статье об управляемом приложении и его веб-клиенте, пишу об особенностях работы веб-сервера с PHP? Отвечаю: для того, что с управляемым приложением веб-сервер работает точно так же, и если "научить" веб-сервер отличать конфигурацию на управляемом приложении от набора обычных HTML-страниц и указать точный путь к модулю обработки кода 1С, то веб-клиент будет работать без проблем. ...ОКОНЧАНИЕ ТЕОРИИ, НАЧАЛО ПРАКТИКИ Ну что ж, тогда приступим к делу. Нетрудно догадаться, что в секции №1 "Global Environment" файла настроек "apache" необходимо указать путь к модулю обработки кода на встроенном языке 1С:Предприятия. Где узнать имя этого модуля? Как все специалисты и веб-серверы, которым что-то неизвестно, мы обратимся к мануалу. Щелкаем "Пуск - Программы - 1С:Предприятие 8 - Управляемое приложение - Документация", в открывшемся окне находим в оглавлении пункт "Настройка веб-сервера", переходим к нему и читаем следующую строку: В первую очередь необходимо указать месторасположение модуля расширения Apache соответствующей версии (wsapch2.dll для Apache 2.0 и wsap22.dll для Apache 2.2, которые находятся в каталоге bin каталога установки 1С:Предприятия 8): LoadModule _1cws_module c:/1cv82/bin/wsap22.dll Видим, что модули для разных версий "apache" применяются различные. Узнаем версию "apache". Для этого необходимо дважды щелкнуть по значку сервера в трее и посмотреть в левый нижний угол открывшегося окна:
Видим, что у меня установлен веб-сервер версии 2.0.55, соответственно мне необходимо указать путь к библиотете "wsapch2.dll". Открываем файл "httpd.conf" и в первой секции указываем путь к библиотеке. Она находится в папке "bin" приложения "1С:Предприятие":
И вот теперь следует обратить внимание на один очень важный момент. Давай сравним путь к модулю в файле настройки с этим же путем в строке адреса "Проводника":
Тот, кто в детстве "на ура" решал задачки типа "Найди на этих картинках 10 отличий" и не потерял до сих пор этого навыка, легко заметит, что в файле настроек все обратные слеши заменены на прямые. Это сделано не из-за моей ненависти к обратным слешам, а потому что "apache"в качестве разделителя каталогов в пути к файлу воспринимает только прямой слеш: /. И если в файле настроек указать другие слеши, то веб-сервер не будет знать, где лежит модуль обработки кода 1С:Предприятие и веб-клиент, соответственно, не заработает. Мало того, "apache" даже не запустится и "упадет" с ошибкой. Замечательно, первый шаг мы сделали. Начинаем читать мануал дальше и встечаем кучу незнакомых и поэтому для нас пока еще "ругательных" слов: ~format_off~ Следующим шагом необходимо настроить виртуальный каталог или местоположение приложения на сервере. Фрагмент конфигурационного файла может выглядеть следующим образом:


Alias /sample c:/www/sample



    SetHandler 1c-application

    ManagedApplicationDescriptor c:/www/sample/default.vrd




~format_on~ Первое встреченное нами непонятное "ругательное" слово - это "Alias". Те, кто знает что оно означает (применительно к веб-технологиям), могут пропустить следующий кусок теории. Остальным опять же рекомендую почитать - ошибки будет искать проще. НАЧАЛО ТЕОРИИ... Слово "Alias" - английское, поэтому для начала обратимся к англо-русскому словарю. Переводчик "СловоЕд" говорит, что "alias - это 1. вымышленное имя, кличка; 2. иначе (называемый): Lewis alias Smith - Льюис, он же Смит". Мда, мы говорим "Льюис" - подразумеваем "Смит", мы говорим "Смит" - подразумеваем "Льюис". Думаю, что если бы в моем GPS-навигаторе, в котором установлен переводчик "СловоЕд", был установлен еще и компьтерный словарь, то к возможным вариантам он бы добавил еще один, используемый в IT-технологиях. Этот вариант произносится компьютерными специалистами как "алиас" с ударением на вторую "а" и имеет то же значение - "кличка" - только применяется не к людям и их меньшим братьям, а к базам данных. Сейчас я поясню на примере, зачем это делается. Допустим, 10 сентября 2008 года я ехал ночью по МКАДу на своем автомобиле со скоростью 141 км/ч и попал в зону действия автоматической камеры, следящей за нарушителями ПДД. Меня сфотографировали, и ГИБДД направила на мой почтовый адрес штрафную квитанцию за превышение скорости (для простоты примера представим, что ГИБДД знает, что 10.09.2008 я жил в Тушино на улице Большая Набережная). Квитанция ехала ко мне почтой, а я в это время ехал в Измайлово, в новую квартиру (поэтому так и спешил - вещи перевозил, надо было две ходки за ночь сделать). ГИБДД об этом еще не знала и, соответственно, квитанция не дождалась адресата и вернулась назад. Это плохо, потому что с данного момента в ГИБДД я буду числиться как неплательщик штрафа. Теперь милиция должна будет узнать мой новый почтовый адрес и перенаправить квитанцию туда. Или я должен уведомить милицию, а также все остальные организации, так или иначе интересующиеся мной, о смене почтового адреса. Представили масштабы "операции"? Но можно поступить и проще. Я могу завести себе обычный в наше время адрес электронной почты и один раз уведомить всех о том, что мне можно легко доставить любую информацию, отправив письмо на e-mail yuri@1200000dollars.ru. Действительно удобно! Отправителю письма не нужно думать, где я нахожусь: дома в Москве, в гостях у мамы в Севастополе или у друзей в Харькове, потому что я фактически завел себе "алиас" - адрес электронной почты, независимый от моех координат в пространстве. Теперь, обратившись к этому "алиасу", любой человек легко отправит мне нужную информацию и сможет рассчитывать на ответ. Или другой пример, более близкий к компьютерам. Представим, что мы создали базу данных и поместили ее в каталог "C:/mydatabase". Теперь при обращении к ней нужно указывать путь к каталогу, где она находится. Все будет хорошо до тех пор, пока не появится желание перенести базу данных в другой каталог. Или пока нам не надоест указывать везде путь к базе "километровой" длины, потому что путь же может быть и таким: "d:/work/1c/v8/my/mydatabase/". В этом случае придется найти все места, откуда мы обращаемся к нашей базе и переписать их... Представили последствия? Желающих обратиться к базе может быть несколько десятков. И даже тысяч. И даже десятков тысяч и миллионов, если речь идет о базе данных веб-сайта, размещенной на сервере провайдера. Все посетители сайта уже запомнили, что он лежит по адресу "http://www.myprovider.ru/work/1c/v8/my/mydatabase/" и тут вдруг провайдер решил поменять сервер и переложить все веб-страницы и базы данных на другой диск... Поэтому, чтобы сберечь нервы клиентов и свои жизни, администраторы баз данных придумали давать базам алиасы или, проще говоря, "клички". Такой подход убивает целое стадо зайцев: 1. Алиас позволяет "достучаться" до базы данных в любом случае независимо от ее физического расположения. 2. Алиас - это короткое и легко запоминающееся обращение к БД. 3. Кроме пути к базе данных рядом с алиасом можно поместить дополнительную информацию о БД или параметры для подключения к ней. ...ОКОНЧАНИЕ ТЕОРИИ, ПРОДОЛЖЕНИЕ ПРАКТИКИ Пропишем для нашей конфигурации алиас и укажем параметры подключения к ней. Предположим, что конфигурация лежит в папке "D:/82test", а алиас мы ей дадим "wclient". Открываем файл "httpd.conf" с помощью "Блокнота" и находим в секции №2 "'Main' server configuration" строку "# Aliases: Add here as many aliases as you need (with no limit)". Опускаемся до последней строки, начинающейся с символа "#" и помещаем после нее следующий текст: ~format_off~



Alias /wclient d:/82testwclient>

    SetHandler 1c-application

    ManagedApplicationDescriptor d:/82test/default.vrd


~format_on~



Обратите внимание на участки, выделенные зеленым и красным цветом. Зеленый - это алиас, то есть имя, под которым мы хотим запускать нашу конфигурацию в браузере. Красный - это физический путь к каталогу конфигурации на диске. Зеленые и красные участки - это все, что нужно добавить в типовой шаблон, который мы нашли в документации от Компании 1С. То есть, как видим, в настройке параметров конфигурации в конфигурационном файле "apache" нет абсолютно ничего сложного! Давайте более подробно проясним, что мы написали в этих 5-ти строках. В первой мы определили новый алиас - "wclient" - и указали, что конфигурация, которой он принадлежит, лежит в каталоге "d:/82test". Во второй мы открыли тег для описания параметров каталога, который сервер ассоциирует с алиасом "wclient" (то есть с каталогом "d:/82test"). В третьей мы даем серверу директиву "SetHandler", которая говорит ему, что все файлы этого каталога должны быть обработаны приложением "1c-application" - нашим управляемым приложением. Четвертая содержит путь к файлу-дескриптору, о котором мы сейчас поговорим подробней, а пятая закрывает тег описания параметров каталога. Собственно настройка веб-сервера уже закончена. Все, что осталось сделать - это создать в каталоге конфигурации файл-дескриптор "default.vrd". В документации к управляемому приложению о файле-дескрипторе сказано следующее: ~format_off~


В файле-дескрипторе содержатся параметры и информация о подключении к конкретной информационной базе.Файл-дескриптор представляет собой XML-документ, сформированный следующим образом:



     xmlns:vrs=»http://v8.1c.ru/8.2/virtual-resource-system»

     base=”/sample”

     ib=”FILE=&quоt;C:\basesemo\&quоt;”/>

Назначение атрибутов:

       base – относительный путь к виртуальному каталогу приложения;

       ib – строка подключения к информационной базе, формируется аналогично строке

              при непосредственном подключении к информационной базе. Значение &quоt; означает кавычку.
~format_on~ Сложно? Нет. Все, что нужно сделать, это вставить в нужные места алиас и физический пусть к конфигурации. Сделаем это. Создадим в каталоге конфигурации новый текстовый документ и переименуем в "default.vrd". Скопируем в него шаблон из документации к управляемому приложению и кое что поменяем: ~format_off~




xmlns:vrs="http://v8.1c.ru/8.2/virtual-resource-system"

base="/wclient"

ib="FILE=&quоt;d:/82test&quоt;"/>
~format_on~




Узнаете зеленый и красный участки? Совершенно верно, они абсолютно совпадают с алиасом и путем к конфигурации в конфигурационном файле "apache".Сложно? Нет, обычный копи-паст. Собственно на этом все, коллега. Сохраняем файлы "default.vrd" и "httpd.conf", перезапускаем веб-сервер, открываем окно браузера и набираем в адресной строке имя нашего веб-сервера (по умолчанию "localhost" или "127.0.0.1") и через слеш указываем алиас нашей конфигурации:
Жмем "Enter". Если получилось сделать все правильно с первого раза, то через пару секунд в центре окна браузера появится вот такой рисунок:
После этого появится окно авторизации пользователя и веб-клиент запустится.
* * *
Теперь отметим некоторые важные моменты: 1. Для успешного запуска веб-клиента необходимо установить платформу 1С:Предприятие 8 не ниже версии 8.2.8.256. 2. В настройках веб-сервера ОДИН РАЗ необходимо подключить модуль обработки кода на строенном языке 1С:Предприятие 8. 3. В настройках веб-сервера НЕСКОЛЬКО РАЗ - для каждой конфигурации - необходимо прописать алиас и параметры каталога конфигурации. 4. В каталоге КАЖДОЙ КОНФИГУРАЦИИ необходимо создать файл-дескриптор "default.vrd" с параметрами подключения к ней.
* * *
Типичные ошибки и их возможные причины 1. При запуске веб-сервера появляется окно сообщения "The request operation has failed!", сервер не стартует:
Причина: скорее всего неверно указаны параметры подключения модуля обработки кода 1С:Предприятие (строка "LoadModule _1cws_module [путь к библиотеке "wsapch2.dll" или "wsap22.dll"]"). Возможно выбрана библиотека, не соответствующая версии веб-сервера, либо неверно указан путь к ней. 2. При попытке набрать путь к конфигурации в адресной строке браузера (например, "http://localhost/mydb") веб-клиент не стартует, появляется сообщение об ошибке "Сервер не найден" с причиной внизу "Не удается найти сервер":
При подобных ошибках всегда необходимо смотрить в конец сообщения об ошибке. В данном случае там написано "Не удается найти сервер или ошибка DNS". Собственно все понятно: сервер либо не работает (возможно просто остановлена служба), либо мы набрали неверный адрес в адресной строке браузера. 3. Полностью соответствует предыдущей ошибке, но причина - "HTTP 404 Файл не найден":
В данном случае сервер работает, но не удалось найти конфигурацию 1С:Предприятия. Возможные причины: неверно указан путь в строке адреса; в каталоге конфигурации нет файла "default.vrd". 4. Веб-клиент пытается стартовать, но через несколько секунд в окне браузера появляется содержимое xml-документа:
Что произошло? В данном случае каталог конфигурации найден, файл "default.vrd" тоже, модуль обработки кода 1С:Предприятия запустить удалось, но подключиться к конфигурации и БД не получилось. Данный xml-документ формируется модулем обработки кода 1С:Предприятия и на самом деле является сообщением об ошибке. Наиболее вероятные причины их появления - неверные настройки подключения к БД, содержащиеся в файле "default.vrd". Более точно идентифицировать причину можно прочитав секцию "message" xml-файла. В данном случае там написано: "Ошибка разбора XML... ...Input is not proper UTF-8...". Анализ этого сообщения навел на мысль, что содержимое файла "default.vrd" набрано не в той кодировке, которая "нравится" 1С:Предприятию. Верна эта мысль или нет - не уверен, но попытка переписать содержимое файла заново "символ-в-символ" помогла - все заработало. Еще один пример подобного сообщения об ошибке:
Я думаю, здесь все понятно без комментариев - файл "default.vrd" лежит в пустом каталоге, в котором нет файла конфигурации 1С:предприятия 8. И совет напоследок: избегайте длинных имен, НЕлатинских символов и пробелов в путях к модулю обработки кода 1С:Предприятия и к конфигурациям - веб-серверы не всегда корректно работают с подобными путями. Это значит, что дистрибутив платформы лучше разворачивать на туда, куда он хочет лечь по умолчанию - в папку "Program files", а например просто в корень диска С:. Аналогично следует поступать и с файлами конфигурации: не стоит помещать ее в каталог "D:\my 1c programs\Проверка работы веб-клиента".
* * *
Ну и не были бы мы, коллега, настоящими программистами, если бы не автоматизировали свой собственный труд ))) Потому что мудрость гласит, что "В первую очередь программист должен автоматизировать своего клиента, ибо клиент платит деньги и дает программисту хлеб насущный. Во вторую очередь программист должен автоматизировать себя, потому что чем быстрее программист работает, тем больше клиентов он сможет автоматизировать. И в третью очередь программист должен автоматизировать друга (подругу, соседа, коллегу по цеху и т.д.) потому что это рулез, а рулез делает мир счастливей". Так вот, я тут по-быстрому склепал простенький скрипт, который позволит тебе проскипать пункт 2 вышесказанной мудрости совсем, а для выполнения пункта 3 тебе достаточно будет кинуть своему другу ссылку на эту страничку, потому что скрипт сам, практически без твоего участия, сформирует все необходимые вставки в конфигурационный файл "apache" и содержимое файла "default.vrd". Для этого тебе нужно: ~format_off~

 

http://www.1200000dollars.ru/82webserver.php

Комментариев нет:

Отправить комментарий