502 Proxy error z DI\Compiler::parseService()

- romiix.org
 - Člen | 343
 
Zdravím,
narazil som na zaujímavú chybu vrátenú prehliadačom:
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /www/index.php.
Reason: Error reading from remote server
Postupným odkrokovaním som zistil, že ju spôsobuje podmienka interface_exists($config) v metóde parseService() pri jednej konkrétnej službe.
Skúsil som na začiatku tejto metódy zavolať funkciu a skutočne vyhadzuje chybu práve toto.
public static function parseService(ServiceDefinition $definition, $config)
{
	if ($config=="App\Model\ImportFilesParser"){
		var_dump(interface_exists($config));
		exit;
	}
	// ...
}
config.neon:
common:
	services:
		- App\Model\ImportFilesParser
Objekt App\Model\ImportFilesParser dedí od
Nette\Object a nemá žiadne závislosti dodávané DI. Vo vnútri
jej metódy je volanie PHPExcel_IOFactory::load($path) –
spolieha sa na autoloading.
Na serveri v logu zostáva:
sub.example.com [Tue Feb 03 11:14:16 2015] [error] [client 178.40.252.14] (20014)Internal error: proxy: error reading status line from remote server 127.0.0.1:90
sub.example.com [Tue Feb 03 11:14:16 2015] [error] [client 178.40.252.14] proxy: Error reading from remote server returned by /www/index.php
Log v aplikácií zostáva prázdny.
Použité je Nette 2.2.7.
Rôzne iné podobné Nette aplikácie bežia na subdoménach toho istého servera.
Na localhoste všetko funguje – Ubuntu 14.04, PHP 5.5.9.
Na testovacom serveri PHP 5.4.17
Skutočne už netuším kde môže byť problém. Ďakujem za akýkoľvek nápad!

- romiix.org
 - Člen | 343
 
Vyriešené!
Odsledoval som to až po blok kódu v službe
ImportFilesParser.
Ak súbor obsahoval tento kód, pri generovaní služby bola vyvolaná Proxy Error:
$dataRow[$cellType] = $this->normalize($cell->getValue(), $cellType);
if (!empty($cell->getValue()))
	$empty = FALSE;
Ak som to takto zmenil, zrazu to chybu nevyvoláva:
$value = $cell->getValue();
$dataRow[$cellType] = $this->normalize($value, $cellType);
if (!empty($value))
	$empty = FALSE;
Zvláštne, že na localhoste to šlapalo:)

- Jan Tvrdík
 - Nette guru | 2595
 
Jazykový konstrukt empty akceptuje v PHP < 5.5 pouze
proměnné, neumí pracovat s obecnými výrazy. Viz dokumentace.