По мотивам Check if your symfony application is ready for deployment
Небольшой сборник рецептов (или же мини тестов), которые желательно выполнять перед развертыванием symfony-проектов. Часть 2-я.
Favicon
Браузеры запрашивают favicon.ico файл, когда юзер в первый раз посещает страницу и впоследствии использует его для отображения в адресной строке и в меню закладок. Этот файлик не только делает внешний вид вашего сайта целостным, но и позволяет визуально отделять его от других сайтов в закладках, добавляет уникальности.
Вот несколько полезных ссылок для создания иконок:
Имена кукисов
Механизм сессий использует куки на стороне клиента и эти куки по умолчанию именуются symfony. В apps/frontend/config/factories.yml добавьте следующие строки для всех окружений:
storage:
class: sfSessionStorage
param:
session_name: my_projectЕсли у вас используется sf[Doctrine]GuardPlugin, вы можете изменить имя куки “Remember me” в myProject/config/app.yml
all:
sf_guard_plugin:
remember_cookie_name: myProjectRememberMeПроверка продакшн сервера
Для проверки того, корректно ли настроен сервер для symfony-проекта, ребята из Sensio написали тестовый скрипт. Загрузить его можно здесь: http://svn.symfony-project.com/branches/1.4/data/bin/check_configuration.php. Поместите его в web-директорию (зачем именно туда непонятно, так как тестируются общие настройки). Выполните скрипт:
$ php check_configuration.php
********************************
* *
* symfony requirements check *
* *
********************************
php.ini used by PHP: Z:\usr\local\php5\php.ini
** WARNING **
* The PHP CLI can use a different php.ini file
* than the one used with your web server.
* (especially on the Windows platform)
* If this is the case, please launch this
* utility from your web server.
** WARNING **
** Mandatory requirements **
OK PHP version is at least 5.2.4 (5.2.4)
** Optional checks **
OK PDO is installed
OK PDO has some drivers installed: mysql
OK PHP-XML module is installed
OK XSL module is installed
OK The token_get_all() function is available
OK The mb_strlen() function is available
OK The iconv() function is available
OK The utf8_decode() is available
OK A PHP accelerator is installed
[[WARNING]] php.ini has short_open_tag set to off: FAILED
*** Set it to off in php.ini ***
[[WARNING]] php.ini has magic_quotes_gpc set to off: FAILED
*** Set it to off in php.ini ***
OK php.ini has register_globals set to off
OK php.ini has session.auto_start set to off
OK PHP version is not 5.2.9Соответствующую документацию можно почитать тут: http://www.symfony-project.org/getting-started/1_4/en/02-Prerequisites.
Языковые настройки
По умолчанию, symfony помещает lang=en на каждую страницу вашего проекта. Если ваше приложение работает с другими языками, отредактируйте apps/frontend/templates/layout.php следующим образом:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $sf_user->getCulture() ?>" lang="<?php echo $sf_user->getCulture() ?>" >
Удаляем /backend.php/ из URI
В файле apps/frontend/config/settings.yml вы можете скрыть отображение имени bootstrap скрипта при помощи опции no_script_name. Эта опция включена для первого сгенерированного рпиложения (как правило frontend) и отключена для последующих.
Почему?
Потому что без указания backend.php (ну или грубо говоря имени приложения через скрипт), symfony не может понять, какое из приложений запускать. Обратите внимание на web/index.php:
<?php require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); sfContext::createInstance($configuration)->dispatch();
Явно указано приложение (frontend) и окружение (prod). Т.о. мы должны придумать как указать symfony нужное приложение, не используя для этого backend.php явно.
Мы можем, например, использовать разные домены:
- http://my-app.com для фронтэнда
- http://my-app-backend.com для бэкэнда
Или, что еще лучше, для бэкэнжа можно использовать поддомен:
- http://my-app.com для фронтэнда
- http://admin.my-app.com для бэкэнда
Если ваш проект размещен на выделенном сервере
Вам нужно добавить новый виртуальный хост в httpd.conf:
<VirtualHost *:80>
ServerName admin.my-app.com
DirectoryIndex backend.php
DocumentRoot "/path/to/the/web/directory"
<Directory "/path/to/the/web/directory">
AllowOverride All
Allow from All
</Directory>
Alias /sf /path/to/the/symfony/data/web/sf
<Directory "/path/to/the/symfony/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>Если ваш проект расположен на виртуальном хостинге
В этом случае у вас скорее всего нет доступа к http.conf и единственный доступный способ конфигурирования – это .htaccess. Добавим после строк:
<IfModule mod_rewrite.c> RewriteEngine On
Следующие строки:
# The admin subdomain returns to the backend
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^admin\.my-app\..*
RewriteRule ^(.*)$ backend.php [QSA,L]И, наконец,
можно модифицировать settings.yml:
prod:
.settings:
no_script_name: trueИ очистить кэш:
php symfony cc
PHP акселератор
Для продуктового сервера вам нужна максимальная производительность. Установка акселератора (вики-статья про акселераторы http://en.wikipedia.org/wiki/PHP_accelerator) даст хороший прирост производительности при малых затратах. Одним из популярных акселераторов является APC (Advanced PHP Cache – http://www.php.net/apc).
Установка на выделенный сервер
Процесс установки APC на выделенный сервер прост насколько это вообще возможно ))
pecl install apc
Виртуальный хостинг
Как правило поставить что-то на виртуальном хостинге нельзя. Но в Doctrine ORM вы можете включить встроенный механизм кэширования. Включить кэширование можно добавив следующий метод в mySfProject/config/ProjectConfiguration.class.php (документация: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction):
/** * Configure the Doctrine engine **/ public function configureDoctrine(Doctrine_Manager $manager) { $manager->setAttribute(Doctrine::ATTR_QUERY_CACHE, new Doctrine_Cache_Apc()); }
P.S. Установка eAccelerator для PHP5 под Windows http://hudson.su/?p=808 (хотя для posix систем принцип тот же, из исходников вы вряд ли его будете собирать, yum install или apt get…)
Оставайтесь с нами, окончание следует ))

2 Comments
Здравствуйте! Уже не знаю что делать! У меня такая проблема: пытаюсь выполнить команду
php symfony doctrine:build-schema
выдает: couldn’t locate driver named mysql
Вот что показал check_configuration.php:
OK PHP version is at least 5.2.4 (5.3.1)
** Optional checks **
OK PDO is installed
[[WARNING]] PDO has some drivers installed: : FAILED
*** Install PDO drivers (mandatory for Propel and Doctrine) ***
OK PHP-XML module is installed
[[WARNING]] XSL module is installed: FAILED
*** Install the XSL module (recommended for Propel) ***
OK The token_get_all() function is available
[[WARNING]] The mb_strlen() function is available: FAILED
*** Install mb_strlen() function ***
OK The iconv() function is available
OK The utf8_decode() is available
[[WARNING]] A PHP accelerator is installed: FAILED
*** Install a PHP accelerator like APC (highly recommended) ***
[[WARNING]] php.ini has short_open_tag set to off: FAILED
*** Set it to off in php.ini ***
[[WARNING]] php.ini has magic_quotes_gpc set to off: FAILED
*** Set it to off in php.ini ***
OK php.ini has register_globals set to off
OK php.ini has session.auto_start set to off
OK PHP version is not 5.2.9
Обратите внимание на строки:
[[WARNING]] PDO has some drivers installed: : FAILED
*** Install PDO drivers (mandatory for Propel and Doctrine) ***
Это скорее всего означает что у вас не загружен pdo_mysql