Ticket #189 (closed bug: fixed)

Opened 1 year ago

Last modified 1 year ago

Erreur lors de l'inclusion de jDaoRecordBase dans la version opt

Reported by: bballizlife Assigned to: laurentj
Priority: highest Milestone: Jelix 1.0beta3.1
Component: jelix:dao Version: 1.0 beta2
Severity: critical Keywords:
Cc: Php version:
Review: Hosting Provider:
Documentation needed: Blocking:

Description (Last modified by laurentj)

Sur un site développé avec jelix et qui tourne avec l'édition opt, je reçois par moments un signalement d'erreur par mail, toujours la même :

2007-05-27 11:04:54 1 require_once(/path/to/lib/jelix/dao/jDaoRecordBase.class.php) <a href='function.require-once'>function(..): failed to open stream: No such file or directory /path/to/lib/jelix/init.php 2005

Sachant que le fichier jDaoRecordBase.class.php n'existe pas ceci est logique, mais pourquoi l'autoload de Jelix veut-il l'inclure ?

Change History

07/06/07 11:15:00 changed by laurentj

  • owner set to laurentj.
  • priority changed from high to highest.
  • status changed from new to assigned.
  • component changed from jelix to jelix:dao.
  • reporter changed from anonymous to bballizlife.

07/18/07 23:21:06 changed by laurentj

  • description changed.

Je ne vois pas d'où ça peut venir pour le moment. Quel sont les selecteurs des daos qui sont la cause ? (module, nom du dao, et nom driver jdb)

09/07/07 10:08:13 changed by laurentj

  • status changed from assigned to closed.
  • resolution set to worksforme.

Impossible de reproduire le bug, ni de voir d'où il peut venir.

10/16/07 22:21:04 changed by laurentj

  • status changed from closed to reopened.
  • resolution deleted.
  • milestone changed from Jelix 1.0beta3 to Jelix 1.0beta3.1.

Le bug est confirmé sur un autre projet, et apparait aussi avec l'édition optimized. Voir http://jelix.org/forums/read.php?5,1423

10/16/07 22:21:43 changed by laurentj

Pardon, je parlais de l'édition developer. Le bug apparait dans les deux éditions.

10/18/07 00:16:49 changed by laurentj

J'ai trouvé le fautif : il s'agit de l'extension APC (que vous utilisez tout les deux). Il y a manifestement un bug dans cette extension. J'ai tracé l'execution. Mon traçage affiche autoload quand on passe dans l'autoload, et exec lorsque le fichier php est executé (un affichage de "exec" est fait dans chaque fichier inclus). Voici ce que ça donne lors du chargement d'un dao stocké en session :

  • autoload : cDaoRecord_depot_Jx_user_Jx_mysql
  • autoload : jDaoRecordBase
  • erreur

Ici, cela veut dire que le fichier de cDaoRecord_depot_Jx_user_Jx_mysql n'est pas executé. Mais APC semble toutefois savoir que la classe cDaoRecord_depot_Jx_user_Jx_mysql nécessite jDaoRecordBase, et tente donc de trouver la classe jDaoRecordBase avant même d'executer le code du fichier cDaoRecord_depot_Jx_user_Jx_mysql ! (et donc il passe outre les include/require qu'il y a dans ce fichier)

Mais il lui arrive de faire l'execution normalement (rarement dans mon cas) et on obtient donc :

  • autoload : cDaoRecord_depot_Jx_user_Jx_mysql
  • exec : cDaoRecord_depot_Jx_user_Jx_mysql
  • exec : jDaoBase

Ce qui est le fonctionnement attendu. APC déconne donc (de mon point de vue). À certaine requête, il fait tout correctement, et parfois tout à l'envers..

J'ai regardé les options de APC, mais il ne semble pas qu'il y ait d'options liées. J'ai essayé par exemple apc.include_once_override à on et à off, mais ça ne change rien.

Bref, pour le moment, le plus sage est de désactiver APC. Et j'apporterai une correction : les deux classes qu'il y a dans jDaoBase.class.php, je les mettrais dans deux fichiers séparés avec chacun le bon nom, l'autoload pourra alors les charger.

Faudrait voir si il y a aussi des problèmes avec les autres accelerateurs de cache.

10/18/07 23:06:02 changed by laurentj

  • status changed from reopened to closed.
  • resolution set to fixed.

Bug corrigé dans le trunk et la beta3.x. Le fichier jDaoBase a été scindé en deux autres : jDaoRecordBase et jDaoFactoryBase, ainsi ces classes peuvent être chargée via l'autoload.

À noter que le bug n'apparaissait pas avec le cache d'opcode eaccelerator.

Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed