Пользовательские скриптыНа нашем хостинге есть возможность использования своих скриптов на языке Perl, с их помощью можно создавать динамические web-приложения любой сложности: от гостевой книги до специфичных онлайн-сервисов со сложной логикой. Здесь мы расскажем о некоторых особенностях среды (правильнее сказать, «зафиксируем поведение»), в которой будут работать ваши скрипты - это позволит писать их наиболее эффективно и адаптировать уже готовые скрипты к нашему хостингу. Почему Perl?Perl - это очень красивый динамический язык (да, мы дадим ему такое на первый вгляд ненаучное определение). Программы на Perl очень ёмкие - часто то, что делается на других языках несколькими неуклюжими конструкциями, на Perl делается одной строчкой. Синтаксис современных языков ООП - это узкий коридор, который «запрещает» допускать многие ошибки. В Perl можно все, даже вызвать несуществующую функцию. Похожие цели - уменьшение числа ошибок - запустили эволюцию в двух разных направлениях - ужесточение и упрощение. Например, Java не даст ошибиться и Вы напишите System.out.println("Поехали!");, а на Perl Вы сами не сможете ошибиться и напишите say "Поехали!". Любая нелогичность, и даже лишняя сложность в Perl отмирает. Благодаря такому необычному направлению эволюции Perl обладает и многими практическими качествами: распространенность и применимость для широкого круга задач, встроенная в язык поддержка мощного средства обработки текста - регулярных выражений, наличие большого числа продуманных и функциональных модулей для решения разных задач (работа с БД, интернет-протоколами, датой/временем, HTML-шаблонами, обработка исключений, графических данных, журналирование). Perl хорошо документирован, в том числе на русском языке (одни «Книга с ламой» и «Книга с альпакой» чего стоят). А сравнивать Perl с тусклым и унылым PHP даже в области web-разработки вообще неуместно. «PHP - это маленькое зло, созданное некомпетентными новичками, в то время как Perl - это большое и коварное зло, созданное умелыми, но извращенными профессионалами.» © Jon Ribbens. Интерфейс FastCGIИсторически сложилось так, что говоря о разработке web-приложений на Perl, обычно подразумевают разработку приложений именно с интерфейсом CGI, при этом недостатки интерфейса почему-то причисляют к недостаткам языка Perl. CGI-приложение - это обычная консольная программа, отправляющая HTTP-заголовки перед отправкой данных. Такое приложение запускается каждый раз для обработки нового запроса, что крайне неэффективно. В итоге мы сделали выбор в пользу интерфейса FastCGI, где каждое приложение является «службой» - однократно запускается и инициализируется для многократной обработки запросов. Все приложения на хостинге работают под управлением Пускача - сервера FastCGI-приложений. С точки зрения разработчика скрипта FastCGI-приложение мало чем отличается от обычного CGI, вот пример такого приложения:
#!/usr/bin/perl Обработка запросов пользователя выполняется в цикле, и все переменные, объявленные вне цикла, сохраняют свои значения (в данном случае счетчик запросов). У модуля CGI::Fast есть замечательное свойство - при старте приложения он сам определяет, какой интерфейс доступен для взаимодействия с сервером - CGI, или FastCGI, и приложение будет работать в соответствующем режиме. Отладка скриптовВсе FastCGI скрипты работают под управлением Пускача - он перехватывает и обрабатывает большинство исключительных ситуаций. Ошибки времени компиляции скрипта автоматически выводятся в браузер. Если быть точным, то в браузер выводятся сообщения об ошибках, которые скрипт направил в STDERR - стандартный поток ошибок - сюда попадают все ошибки компиляции и некоторые предупреждения (warning'и), которые могут печататься в скрипте до входа в цикл обработки запросов. Инструкции, вызывающие такие предупреждения должны быть исправлены, либо, если инструкции действительно нужны и включены в код осознанно, вывод предупреждений должен быть подавлен директивой no warnings (точечно, только в том блоке, где это необходимо). При заходе в цикл обработки запросов (при выполнении CGI::Fast->new) поток ошибок STDERR закрывается и все потоки ВВ перенаправляются через единое соединение с web-сервером. Поэтому ошибки, которые программа будет писать в STDERR, будут выводиться в логи web-сервера - logs/errors.log. Низкоуровневые ошибки (возникшие до передачи управления логике скрипта) и ошибки, связанные с достижением лимитов на ресурсы, выводятся в логи Пускача - logs/puskach.log. Права доступаПод каждый новый сайт на нашем хостинге создается свой пользователь ОС, и все скрипты сайта выполняются от имени этого пользователя. Однако все сайты обслуживаются одним web-сервером, поэтому страницы сайта, графика, файлы должны быть доступны на чтение непривилегированному пользователю, от имени которого работает web-сервер. При установке прав лучше всего руководствоваться принципом минимальных привилегий:
Для установки прав доступа воспользуйтесь, например, FAR Manager'ом - скопируйте файл на FTP, выделите его, нажмите Ctrl+A и установите флажки для действий R (чтение), W (запись), X (запуск) для владельца, группы владельца и остальных пользователей. |