По мотивам 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:usrlocalphp5php.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
…)
Оставайтесь с нами, окончание следует ))
Здравствуйте! Уже не знаю что делать! У меня такая проблема: пытаюсь выполнить команду
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
Для решения проблемы в php.ini нужно указать верный путь к папке ext (или другой, где лежат расширения).