В прошлый раз мы уже разворачивали Symfony2 окружение на Vagrant. Пустая страница на голой Symfony2 запущенной на Vagrant генерируется около 3-4 минут на стандартном десктопном железе. Это первая проблема с которой сталкивается программист, решивший разрабатывать на модном нынче Vagrant. Что-то разрабатывать в таком темпе становится невозможно.
Проблема в очень медленной файловой системе бесплатного VirtualBox и до кучи медленного стандартного механизма синхронизации файлов Vagrant.
Можно все исправить прикупив VMware. Их ФС работает в разы быстрее и, как говорят, Symfony2 будет летать на Vagrant. Однако я не проверял, т.к. лишних денег на покупку VMware у меня нет, да и вообще мы не ищем легких путей.
Второй способ - это изменение механизма синхронизации файлов. Разберемся, что же нам предлагает Vagrant:
Надеюсь вы сможете сами настроить SMB, для этого нужно добавить целых пять символов, включая кавычки.
Запускаем и....долго. Жутко долго грузится Symfony2. Быстрее стандартного механизма, но ждать минуту для инициализации страницы не вариант. Проблема в большом количестве генерируемых файлов кеша Symfony2, которые находятся в синхронизируемой директории. Исключить что-то из синхронизации нельзя, так уж устроен механизм SMB. Поэтому подойдем к вопросу с другой стороны: перенесем кеш Symfony2 (а заодно и логи, чтоб еще легче было) за папку /vagrant.
Открываем наш AppKernel.php и добавляем пару методов (тестовое окружение нужно вынести, чтобы тесты у вас отрабатывали не часами, а за адекватные сроки):
public function getCacheDir()
{
if ($this->environment == 'dev' || $this->environment == 'test') {
return '/tmp/symfony2/cache/' . $this->environment;
} else {
return parent::getCacheDir();
}
}
public function getLogDir()
{
if ($this->environment == 'dev' || $this->environment == 'test') {
return '/tmp/symfony2/logs/' . $this->environment;
} else {
return parent::getLogDir();
}
}
Таким образом для dev и test окружения мы перенесли папки кеша и логов в /tmp. Проверяем - страница генерируется примерно за 2-3 секунды. Я считаю это отличным результатом, пусть и дольше реального сервера.
Так же у SMB есть еще один минус: невозможность создать символьные ссылки внутри синхронизируемой директории (например, ассеты). Это доставляет некоторые неудобства, которые я пока не обошел. Советы из интернетов мне лично не помогли.
По поводу раздела Limitations в документации: я так и не понял где должна появиться проблема, поэтому не волнуйтесь на этот счет.