developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 13 years ago

Closed 13 years ago

#189 closed bug (fixed)

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

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

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 (7)

comment:1 Changed 13 years ago by laurentj

  • Component changed from jelix to jelix:dao
  • Owner set to laurentj
  • Priority changed from high to highest
  • Reporter changed from anonymous to bballizlife
  • Status changed from new to assigned

comment:2 Changed 13 years ago by laurentj

  • Description modified (diff)

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)

comment:3 Changed 13 years ago by laurentj

  • Resolution set to worksforme
  • Status changed from assigned to closed

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

comment:4 Changed 13 years ago by laurentj

  • Milestone changed from Jelix 1.0beta3 to Jelix 1.0beta3.1
  • Resolution worksforme deleted
  • Status changed from closed to reopened

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

comment:5 Changed 13 years ago by laurentj

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

comment:6 Changed 13 years ago 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.

comment:7 Changed 13 years ago by laurentj

  • Resolution set to fixed
  • Status changed from reopened to closed

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.

Note: See TracTickets for help on using tickets.