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

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
romiix.org
Člen | 343
+
0
-

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
+
0
-

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
+
0
-

Jazykový konstrukt empty akceptuje v PHP < 5.5 pouze proměnné, neumí pracovat s obecnými výrazy. Viz dokumentace.