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.