Chyba pri vyrizovani pozadavku

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

Zdravím, mám menší problém na serverech jako je active nebo gigaserver, náhodně se mi stává, že mi server nevrátí stránku, přesné znění chyby je
"
Chyba pri vyrizovani pozadavku

Server nevratil zadnou webovou stranku, kterou by bylo mozne zobrazit.
Pravdepodobna pricina teto chyby je ve scriptu, ktery webovou stranku generuje.
"
Používám nette 2.1.1 a k tomu nejnovejší dibi 2.1.1. Nesetkal se s tím už někdo?
Problém je, že nevím, kde můžu zjistit který script to dělá.
Díky, budu rád za každý návrh

Jiří Nápravník
Člen | 710
+
0
-

logy, at uz z Debugger nebo error_logy nerikaji nic?

pak je taky dost mozny, ze server nemusi stihat, meli jsme s tim podobne problemy, proste se nezpracoval php skript a nebylo co vykreslit, tak tohlevyhazoval. Jednou taky byl problem, ze bylo deseti tisice session souboru, a server byl overloaded. Ale ot jsou spsie krajni meze, pokud nerikaji nic logy…

zool
Člen | 144
+
0
-

to je právě ten problém, že logy nic neříkají. Na gigaserveru mi říkaly, že se postupně přeplňuje memory limit obecně. Ten je vždy počítán na každý spuštěný skript. Ale to mi nepřijde správně. Když se stránka zobrazí tak to bere maximálně do těch 10 MB paměti.

Tento presenter to dělá v celku často, zde je kod, včetně předka. Třeba dělám něco špatně.

<?php


namespace PartnerModule;

use Models\Obrazky_zbo;
use Models\Zbozi;
use Nette\Application\UI\Form;
use Nette\DateTime;
use Nette\Http\FileUpload;
use Nette\Image;
use Nette\Utils\Strings;

class AkcePresenter extends BasePresenter
{
    /** @var int */
    public $id;
    /** @var \Models\Zbozi @inject */
    public $zbozi;
    /** @var \Models\Obrazky_zbo @inject */
    public $obrazky;
    /** @var \DibiFluent */
    public $akce;

    protected function createComponentAkceForm( $name )
    {
        $form = new Form( $this, $name );
        $form->addText("nazev","Název akce do 200 znaků")->setRequired("Název je povinný");
        $form->addSelect("stranky_id","Zařazení do kategorie", $this->stranky->select("id, nazev")->where("kategorie = 1 AND stav=1 AND nazev != 'Menu'")->fetchPairs("id","nazev"))
            ->setPrompt("-- prosím vyberte --")
            ->setRequired("Zařazení je povnné");
        $form->addText("datum_konec","Datum ukončení nabídky")->setType("date")->setRequired("Datum je povnné");
        $form->addText("cena_puvod","Původní cena")
            ->setRequired("Cena je povnná")
            ->addRule(Form::INTEGER,"Cena musí být v celých korunná.");
        $form->addText("sleva","Sleva v procentech")
            ->setRequired("Sleva je povnná")
            ->addRule(Form::INTEGER,"Cena musí být v celých korunná.");
        $form->addHidden("cena");
        $form->addText("ulice","Ulice, č.p.")->setRequired("Ulice je povinná");
        $form->addText("mesto","Město")->setRequired("Město je povinný");
        $form->addText("psc","PSČ")->setRequired("PSČ je povinný");
        $form->addTextArea("kratky","Krátký popis");
        $form->addTextArea("dlouhy","Dlouhý popis");
        $form->addText("vyhoda1","Výhoda1");
        $form->addText("vyhoda2","Výhoda2");
        $form->addText("vyhoda3","Výhoda3");
        $form->addUpload("soubory","Vložit jednotlivé fotografie", true);
        $form->addSubmit("ok","Uložit nabídku");
        $form->onSuccess[] = $this->akceFormSubmitted;
    }
    public function akceFormSubmitted( Form $form )
    {
        $values = $form->getValues();
        $soubory = $values["soubory"];
        $values["uzivatel_id"] = $this->user->id;
        $values["adresa"] = Strings::webalize($values["nazev"]);
        unset($values["soubory"]);
        if($this->id)
        {

        }
        else
        {
            $insert = $this->zbozi->insert($values);
            foreach($soubory as $soubor)
            {

                $file = $soubor;
                if($file->isOk())
                {
                    if($file->isImage())
                    {
                        $name = time()."-".$file->sanitizedName;
                        $soubor = Image::fromFile($file);
                        $soubor->resize(800,600);
                        $soubor->save($this->fileStorage->wwwDir . "/images/produkty/".$name);
                        $data = array(
                            "zbozi_id" => $insert,
                            "soubor"   => $name,
                            "datum"    => new DateTime(),
                            "hlavni"   => 0
                        );
                        $this->obrazky->insert($data);
                    }
                }
            }
        }
        $this->flashMessage("Akce byla uložena.");
        $this->redirect('this');
    }
    public function actionDefault()
    {
        $this->akce = $this->zbozi->select("id, nazev, adresa, kratky, stav, (select soubor from obrazky_zbo ob where ob.zbozi_id=zbozi.id order by hlavni DESC LIMIT 1) as soubor")
            ->where("uzivatel_id = ?",$this->user->id);
    }
    public function renderDefault()
    {
        $this->template->akce = $this->akce;
    }
    public function actionNova()
    {

    }
    public function renderNova()
    {

    }
    public function handleAktivuj($idz)
    {
        $this->zbozi->db->update("zbozi",array("stav"=>1))->where("uzivatel_id = ? AND id = ?",$this->user->id,$idz)->execute();
        $this->redirect("this");
    }
    public function handleDeaktivuj($idz)
    {
        $this->zbozi->db->update("zbozi",array("stav"=>0))->where("uzivatel_id = ? AND id = ?",$this->user->id,$idz)->execute();
        $this->redirect("this");
    }
}

Zde jeho předek

<?php

namespace PartnerModule;

use Models\Stranky;


abstract class BasePresenter extends \BasePresenter
{
    /** @var \Models\Stranky @inject */
    public $stranky;

    public function startup(){
        parent::startup();
        if(!$this->user->isLoggedIn())
        {
            $this->flashMessage("Na tuto stránku mají přístup pouze přihlášení uživatele.");
            $this->redirect(":Front:Stranky:");
        }
    }
    public function beforeRender()
    {
        parent::beforeRender();
        $this->template->uzivatel = $this->uzivatel->get($this->user->id);
    }
}

Majkl578
Moderator | 1364
+
0
-

Můj tip je to resizování obrázku. To není zrovna laciná akce, co se paměti týče.

Jiří Nápravník
Člen | 710
+
0
-

JJ, resize obrázku bych taky tipoval. Jestli má povoleno hosting Imagick, tak pouzij ten, pokud si dobre pamatuji, tak ten se npocita do memory_limit a bezi „mimo php“

zool
Člen | 144
+
0
-

No ono to resize používá až po odeslání formuláře, ale ta chyba nastává právě už při návštěvě stránky. Administratoři z gigaserveru říkají, že je největší pravděpodobnost v tom, že tam cacheji požadavky a nějaký cache naroste až na kritickou hranici a spadne to. Ale když se podívám do složky temp, tak ty cache mají tak do 100Kb. Dá se nějak nastavít cache, jako třeba jiné ukládání? Ted nemyslím složku.?
A nemůže to dělat akcelerátor?

Editoval zool (14. 4. 2014 16:33)

zool
Člen | 144
+
0
-

Tak jsem zjistil, že chybu to háže převážně, když mám spuštěný nette panel na produkčním serveru. Je možné že by to mohlo způsobovat toto? Dá se tomu to nějak předejít?