Problem pri upgradu na nove verze

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

Ahoj,

ono tohle tema sem mozna az tak moc nepatri, ale prijde mi to natolik zajimave, ze to sem napisu.
I jal jsem se, iniciativne, vcera do upgradu php a nette na nejnovejsi verze. A stala se mi takova zvlastnost. Po refreshi mi vsak Apache odejde do vecnych lovist s hlaskou:

Parent: child process exited with status 3221225477 -- Restarting.

Jenom pro upresneni, pred tim chodilo vsechno naprosto v poradku. No tak jsem vyzkousel nekolik ruznych zpusobu vcetne UTFG. Naces jsem zjistil, ze status 3221225477 je jakasi chyba, ktera vznika leckdy a pri ledascem a zpravidla je chyba nekde v konfiguraci. Dalsi zajimavost, kterou jsem zjistil (a ktera me prinutila sem napsat) je, ze kdyz z adresare temp smazu vsechny soubory (tj. Nette si je pak vytvari znovu), tak vsechno po tento jeden request bezi jak ma. Dalsi refresh uz ale zase vede jen k hlasce s tlacitkem ‚Neodesilat‘…

Nemate nekdo prosim alespon nejaky napad, kudy bych se mohl zkusit ubirat?

Jan Tvrdík
Nette guru | 2595
+
0
-

A co se praví v logu Apache?

Panda
Člen | 569
+
0
-

Stávalo se mi to taky, pomohlo vypnout rozšíření PHP jako jsou XDebug a eAccelerator.

arron
Člen | 464
+
0
-

Jan Tvrdík napsal(a):

A co se praví v logu Apache?

Ano, to se pravi v logu Apache (ta hlaska).

Panda napsal(a):

Stávalo se mi to taky, pomohlo vypnout rozšíření PHP jako jsou XDebug a eAccelerator.

Pridavam par radek z php.ini

extension=php_mbstring.dll
extension=php_bz2.dll
extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dbase.dll
extension=php_exif.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
extension=php_gd2.dll
extension=php_gettext.dll
;extension=php_ifx.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
;extension=php_mcrypt.dll
extension=php_mhash.dll
;extension=php_mime_magic.dll
;extension=php_ming.dll
extension=php_pdo.dll
extension=php_pdo_mysql.dll
;extension=php_mssql.dll
;extension=php_msql.dll
extension=php_mysql.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_sockets.dll
extension=php_sqlite.dll
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
;extension=php_xmlrpc.dll
extension=php_xsl.dll
zend_extension_ts="C:\php5\ext\ZendDebugger.dll"`
David Grudl
Nette Core | 8228
+
0
-

A když všechny moduly a akcelerátory vypneš, chyba se opakuje?

arron
Člen | 464
+
0
-

David Grudl napsal(a):

A když všechny moduly a akcelerátory vypneš, chyba se opakuje?

Tak jsem vsecho ‚zastředníkoval‘, restartoval apache a? Nic…vsechno pri starem…

arron
Člen | 464
+
0
-

Funny…tak se nakonec zda, ze za to muze pripojeni k mysql…ve chvili kdy jsem ho vyhodil, tak se zmena vyparila…takze to bude v nejakych ruzne verzovanych knihovnach…diky:-)

Editoval arron (9. 4. 2009 14:09)

arron
Člen | 464
+
0
-

Tak oprava…precejenom je nekde v Nette nejaky problem:-) Co me k tomu vede?

Predne se mi presne ten samy problem objevil i na pocitaci, kde jsem neupgradoval verzi php. A objevil se presne ve chvili, kdy jsem prehral nove Nette (rev. 266).

Problem nastaval ve chvili, kdy jsem v danem requestu tahal nejaka data z databaze. Samotne pripojeni nevadilo (ze by nejake lazy??). Prvni request po tom, co jsem smazal kompletni adresar temp (cili vsechny nacachovane templaty a RobotLoader cache) probehl bez problemu. Dalsi request (F5) uz neprobehl a odeslal Apache do vecnych lovist s kritickou chybou:

szAppName : httpd.exe szAppVer : 2.2.3.0 szModName : php5ts.dll
szModVer : 5.2.9.9 offset : 000049c7

Tak jsem si chvili hral se svym zdrojovym kodem…pokud jsem zmenil verzi Nette na tu puvodni co jsem mel (rev. 220), problem se neobjevil. Pokud jsem zakomentoval vsechny pristupy do databaze, problem se neobjevil (rev. 266). Tak jsem drobil svoje pokusy dal…az jsem prisel na to mozna kapnul.

Problem nakonec zpusoboval vypis v sablone. Mam tridu, ktera pretezuje metodu __toString(). Pokud do sablony dam jednoduse {$myClass} tak to zpusobuje uvedeny problem. Pokud explicitne zavolam {$myClass->__toString()} tak je vsechno v poradku.

Tot pricina problemu, nicmene absolutne netusim PROC?

A jeste to cele upresnim, pokud pouziju neescapovanou variantu {!$myClass}, tak je vsechno v pohode:-)

Editoval arron (14. 4. 2009 9:35)

arron
Člen | 464
+
0
-

Tak to skoro vypada, ze je to podobny, ne-li stejny, problem jako tady https://forum.nette.org/…iewtopic.php?…

Jan Tvrdík
Nette guru | 2595
+
0
-

Tak jsem dneska taky úspěšně shodil Apache. Tentokrát s použitím Nette\Application\Link. Vyřešeno explicitním uvedením __toString().

LM
Člen | 206
+
0
-

Taky jsem na to narazil, ale nepodařilo se mi to zjednodušit natolik aby to šlo reportovat na bugs.php.net, leda jim tam postnout backtrace.

David Grudl
Nette Core | 8228
+
0
-

Nemůže to způsobit to, že se během __toString() vyhodí výjimka? Tohle PHP nezvládá.