Проблема со старым приложением Symfony - PullRequest
3 голосов
/ 01 апреля 2011

Я недавно устроился на работу в веб-газете.На сайте у нас есть очень старое и важное приложение Symfony, написанное для старшего разработчика, которое давно прошло.Это приложение является священным: кровь доходов газет.Проблема в том, что у нас нет резервной копии, нет установки для разработчика, ничего, только производственная установка Когда я пришел сюда, я был очень удивлен этим рискованным решением.Неделю назад приложения начали выходить из строя.У меня нулевой опыт в Symfony (я - разработчик рельсов), и что старые приложения были «старым и верным псом, который ничего не потерпит», но начал терпеть неудачу, и все взбесились !

Итак, мне нужна помощь разработчиков Symfony для этого сайта, чтобы найти «быстрое» решение, в то время как я пытаюсь убедить своих боссов, что нам нужен более профессиональный подход (а также время и ресурсы для этого).проблема в этом

Каждый раз, когда люди используют приложение, это сообщение появляется

фатальная ошибка: допустимый объем памяти 134217728 байт исчерпан (попытался выделить 17106016 байт) в / path /в / symfony / config_core_compile.yml.php в строке 3366

Строки находятся в середине этой функции

public function shutdown()
{
  if (!is_null($this->cache) && $this->cacheChanged)
  {
    $this->cacheChanged = false;
    $this->cache->set('symfony.routing.data', serialize($this->cacheData));
  }
}

Я посмотрел на Google, но нашел только людей с таким жепроблема, нет решения ... Пожалуйста, любой, кто мог бы помочь мне, помогите мне, пожалуйста!

Ответы [ 3 ]

1 голос
/ 02 апреля 2011

Я бы сначала попытался очистить кеш в приложении, так как кеш может быть огромным.

в корневой папке Symfony выполните эту команду

php symfony clear:cache

Если это не помоглопроблема, я бы увеличил предел памяти, пока корень проблемы не будет исправлен

Так что в файле index.php добавьте это до того, как произойдет какая-либо загрузка Symfony

ini_set('memory_limit', '256M');

Лучший способОтладка приложения заключается в использовании встроенной среды разработки.Добавьте в корень Symfony файл со следующим:

// this check prevents access to debug front controllers that are deployed by accident to production servers.
// feel free to remove this, extend it or make something more sophisticated.
if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1', 'YOUR IP ADDRESS HERE')))
{
  die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.<!-- ' . $_SERVER['REMOTE_ADDR'] . ' -->');
}

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('[app name]', 'dev', true);
sfContext::createInstance($configuration)->dispatch();

Не забудьте добавить свой IP-адрес в третью строку, чтобы у вас был доступ для просмотра данных среды разработки.

Имя приложения - это имя приложения, которое находится в папке %symfony root%/apps

1 голос
/ 01 апреля 2011

Думаю, проблема в размере кеша PHP, а не symfony.Самый быстрый способ преодолеть эту проблему - дать больше памяти php.Для вашего описания у вас есть 128 МБ памяти, попробуйте указать 256 (например).Если вы используете Linux, проверьте , , чтобы изменить объем памяти.

Знайте, что это патч, а не базовое решение.

0 голосов
/ 01 апреля 2011

И, возможно, он работает в режиме отладки.Проверьте во фронт-контроллере /index.php строку $ configuration = ProjectConfiguration :: getApplicationConfiguration ('frontend', 'prod', true);Это должно быть $ configuration = ProjectConfiguration :: getApplicationConfiguration ('frontend', 'prod', false);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...