Веб-страница находится на Symfony 2.5.2 с 5 самосозданными пакетами и FOSUserbundle. Он довольно большой, но по сути напоминает блог с комментариями пользователей.Неопределенная переменная: соответствует в .. /app/cache/prod/appProdUrlMatcher.php on line .. прерывистый выпуск
Он находится на общем сервере OVH.
Он работает в разработчика и прод, но когда в прод: после того, как один-три дня я либо получаю ошибку HTTP 500 или (реже) пустую страницу с URL http://mypage.com/web//
Последнее указывает на то, что маршрут не было найдено. Все еще маршрут ДОЛЖЕН быть там, так как проблема появляется «за ночь», то есть с перерывами.
Когда я либо один из этих ситуаций следующие средства правовой защиты «решить» проблему:
- Очистить кэш (я обычно удалить все приложения каталог/кэш/Prod)
- передать AppKernel от «прод», ложно «прод», правда (без очистки кэша
- проходящего в app_dev.php
Я не знаю, если прерывистость будет происходить для случая 2 (так как я не хочу в рискуйте оставить сайт открытым таким образом). Для случая 3: при возврате к prod без очистки кеша проблема остается.
Когда я получу ошибку 500, в файле журнала нет записи.
Всякий раз, когда я проверял, в то время я получил ошибку пустой страницы (с URL-адресом, заканчивающимся web //), файл журнала не имеет записи; но есть запись от нескольких часов до этого (от посетителя я полагаю) с указанием:
[2015-07-23 04:04:18] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /dir1/dir2/fr"" at /home/mysite/www/Symfony/app/cache/prod/classes.php line 1977 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException: No route found for \"GET /dir1/dir2/fr\" at /home/mysite/www/Symfony/app/cache/prod/classes.php:1977, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException: at /home/mysite/www/Symfony/app/cache/prod/appProdUrlMatcher.php:545)"} []
Я попытался
добавить в Сети/app.php в
$response->setMaxAge(600);
который проявляет также периодические ошибки (удалил его снова), чтобы добавить автоматическое удаление кеша в главном контроллере (в свою защиту: это НЕ предназначалось как решение, а только для отладки). Он снова удаляется после прерывания.
//---------- clears cache first user at midnight $dirDate=date('d',filemtime($this->container->getParameter('kernel.cache_dir'))); if (date('d') != $dirDate AND date('H')<6) { //--- from http://stackoverflow.com/questions/24115395/programmatically-clear-cache-on-symfony-2 $fs = new Filesystem(); $fs->remove($this->container->getParameter('kernel.cache_dir'));}
Я пытался добавить
$kernel = new AppCache($kernel);
в веб/app.php, но не мог заставить его работать на всех (как это вне моей компетенции).
Я не могу продолжать вручную очистить кэш каждый день (или чаще?) И прерывистый характер проблемы не позволяет типичных проб и ошибок отладки excersize. Мне нужна помощь, чтобы понять причину, прежде чем продолжать принимать «слепые» действия.
Я могу, конечно, поделиться большей частью кодировки, но не знаю, какую часть поделиться с сообществом здесь. Вероятно, нет «типичной» ошибки, так как код всегда работает некоторое время, и проблема ТОЛЬКО появляется через 1-3 дня, с перерывами.
Дополнительный после комментария Франческо:
Там нет ошибки в файле журнала в приложении Symfony в/журнал, но я нашел некоторые в журнале сервера (общий) (logs.ovh.net). Тем не менее, эти журналы являются следствием ошибки 500. Есть два различных сообщения (и многие из каждого из них):
[Sat Jul 25 23:29:07 2015] [error] [client 66.249.64.104] [host www.mywebsite.com] FastCGI: comm with server "/homez.437/myweb/www/Symfony/web/app.php" aborted: idle timeout (300 sec)
[Sat Jul 25 23:29:07 2015] [error] [client 66.249.64.104] [host www. mywebsite.com] FastCGI: incomplete headers (0 bytes) received from server "/homez.437/myweb/www/Symfony/web/app.php"
[Sat Jul 25 23:29:07 2015] [error] [client 66.249.64.104] [host www. mywebsite.com] FastCGI: An error happend on Fastcgi processing, fallback to CGI
[Sat Jul 25 23:29:10 2015] [error] [client 66.249.64.104] [host www. mywebsite.com] (103)Software caused connection abort: Failed to flush CGI output to client
[Sat Jul 25 22:35:58 2015] [error] [client 66.249.64.94] [host www. mywebsite.com] (104)Connection reset by peer: FastCGI: comm with server "/homez.437/myweb/www/Symfony/web/app.php" aborted: read failed
[Sat Jul 25 22:35:58 2015] [error] [client 66.249.64.94] [host www. mywebsite.com] FastCGI: incomplete headers (0 bytes) received from server "/homez.437/myweb/www/Symfony/web/app.php"
[Sat Jul 25 22:35:58 2015] [error] [client 66.249.64.94] [host www. mywebsite .com] FastCGI: An error happend on Fastcgi processing, fallback to CGI
Ошибки, регистрируемые на общем сервере произошедшей в то время как я мог бы получить доступ к веб-сайт без каких-либо проблем. Что это значит?
ОБНОВЛЕНИЕ Постановка задачи 3 месяца после первой REV:
я, наконец, удалось получить код ошибки, добавив следующий код в app.php (верхняя часть кода перед первым использованием «») :
ini_set('display_errors', 1);
error_reporting(-1);
ошибка затем всплывает в HTML под Ури сайта:
- Notice: Undefined переменной: матч es в /xxx/app/cache/prod/appProdUrlMatcher.php в строке 84
- Предупреждение: array_replace(): Аргумент # 1 не является массивом в /xxx/app/cache/prod/appProdUrlMatcher.php в строке 84
- Предупреждение: неверный аргумент, предоставленный foreach() в /xxx/app/cache/prod/classes.php в строке 1414
- Примечание: Неопределенный индекс: _route в /xxx/app/cache/prod/classes.php on линия 1966
- Примечание: Undefined переменной: матчи в /xxx/app/cache/prod/appProdUrlMatcher.php по линии 84
- Предупреждение: array_replace(): Аргумент # 1 не является массивом в/ххх/приложение/кэш /prod/appProdUrlMatcher.php в строке 84
- Предупреждение: Недействительный аргумент, предоставленный foreach() в /xxx/app/cache/prod/classes.php в строке 1414
- Примечание: Неопределенный индекс: _route in/xxx/vendor/symfony/symfony/src/Symfony/Компонент/Безопасность/Http/HttpUtils.php на линии 112
линия 82 до 85 из appProdUrlMatcher.php являются
// mysite_publish_artWork
if (0 === strpos($pathinfo, '/gallery/publish') && preg_match('#^/gallery/publish/(?P<idOfArtWork>[^/]++)$#s', $pathinfo, $matches)) {
return $this->mergeDefaults(array_replace($matches, array('_route' => 'aliquam_publish_artWork')), array ( '_controller' => 'Aliquam\\ArtWorkBundle\\Controller\\ArtWorkController::publishArtWorkAction',));
}
NB: линия 84 является линией, начиная с возвращения $ this->
Когда я просто добавить CRLF (Notepad ++), так что приведенный выше код выглядит следующим образом:
// mysite_publish_artWork
if (0 === strpos($pathinfo, '/gallery/publish') && preg_match('#^/gallery/publish/(?P<idOfArtWork>[^/]++)$#s', $pathinfo, $matches)) {
return $this->mergeDefaults(array_replace($matches, array('_route' => 'mysite_publish_artWork')),
array ( '_controller' => 'MySite\\ArtWorkBundle\\Controller\\ArtWorkController::publishArtWorkAction',));
}
то ошибка 500 исчезает и загрузки страницы.
Этот appProdUrlMatcher.php не является классом, который я создал; это часть кеша, созданного symfony. Конечно, я могу удалить его, и он будет работать некоторое время, пока ошибка не появится снова.
Маршрут - это маршрут к контроллеру (обеспеченному, только администратору). в то время как все эти прерывистые проблемы произошли, я не назвал маршрут один раз. NB: когда я вызываю маршрут как администратор, он работает. Вот YML маршрута:
mysite_publish_artWork:
pattern: /publish/{idOfArtWork}
defaults: { _controller: MysiteArtWorkBundle:ArtWork:publishArtWork }
requirements:
idOfArtWork: \d+
и соответствующий контроллер
public function publishArtWorkAction($idOfArtWork)
{
$em=$this->getDoctrine()->getManager();
$repository=$em->getRepository('AliquamArtWorkBundle:ArtWork');
$artWork=$repository->find($idOfArtWork);
$listOfArtWork=$repository->findAll();
if (isset($idOfArtWork))
{
if ($artWork->getPublicate()==true){$published=false;}else{$published=true;}
$csrfProvider = $this->container->get('form.csrf_provider');
$unique_fake = $csrfProvider->generateCsrfToken('unique_fake');
if ($this->getRequest()->query->get('csrf_unique_fake')==$unique_fake)
{
$artWork->setPublicate($published);
$em->persist($artWork);
$em->flush();
$translatedText = $this->get('translator')->trans('message.flash.modified');
$this->get('session')->getFlashBag()->set('infoGlobal',$translatedText);
}
foreach ($listOfArtWork as $l)
{
$l->setContent(substr($l->getContent(),0,25)."...");
}
}
return $this->redirect($this->generateUrl('mysite_manage_artwork'));
}
я могу удалить/очистить кэш, но он будет делать на самом деле смысл переписать файл в кэш/прод/? Я не думаю, что это хорошая идея. Но у меня нет другого.
И что-то, что произошло сегодня: я могу получить доступ к сайту на своем ПК, но не на своем мобильном телефоне (Windows Phone).
Немного не по теме, но вы можете обновиться до Symfony 2.5.12, который является последним relese в серии 2.5.x. Тем не менее, информация о 500 ошибках ДОЛЖНА отслеживаться где-то. Когда происходит ошибка, попробуйте увеличить уровень ошибок PHP, например. в самом файле app.php. –