2011-05-18 7 views
1

J'utilise LAMP avec CodeIgniter pour un de mes projets; version contrôlée par SVN. Chaque fois que j'exécute svn export file:///svnrepo/project/trunk/www . --force dans le répertoire www, puis recharger la page Web, il devient vide.svn export rend ma page vide

Le site Web ne s'affiche qu'après avoir effectué un service httpd restart (à l'aide de CentOS 5). Je veux être en mesure d'exécuter l'export svn en utilisant un script de construction Phing dans le futur et je ne veux pas avoir les privilèges root et redémarrer apache à chaque fois que je fais une build.

Est-ce que je rencontre un problème commun? Comment puis-je le résoudre sans redémarrer Apache?

Edit: Il semble que quelqu'un a eu ce problème avant: http://codeigniter.com/forums/viewthread/181642/

+0

J'ai regardé autour de moi. Cela pourrait potentiellement être un problème de mise en cache APC. – samxli

+0

Je peux confirmer cela aussi. La désactivation du cache APC a résolu le problème. J'ai installé APC à travers mon gestionnaire de paquets. Peut-être installer à travers PECL permettrait d'éviter ce problème? Pour le moment, je ne fais que redémarrer le serveur web après l'export svn. – mdgrech

+0

Page blanche = erreur fatale. Découvrez l'erreur fatale et modifiez votre publication. –

Répondre

0

Ok je suis arrivé it.SVN maintient un fichier la dernière fois modifié, qui jette le cache APC. Donc, pour le résoudre, nous mettons à jour la dernière heure de tous les fichiers après avoir exécuté une exportation SVN. Voici mon script final:

#!/bin/sh 
svn export --force file:///home/steve/repo/exmaple/trunk \ 
/home/steve/public_html/example.com/public/ 
find /home/steve/public_html/exmaple.com/public | xargs touch 

Vous pouvez trouver plus de détails here.

+0

Je semble obtenir "touch: option invalide - 'T'" à la suite de cette dernière trouvaille piped à "xargs touch" ... – Rimer

0

Une solution alternative serait de définir apc.stat = 0 (reference) dans l'apc.ini, puis d'utiliser apc_clear_cache() (reference) pour forcer la suppression du cache d'opcode.

Ce qui est génial dans cette solution est que lorsque apc.stat est mis à 0, il désactive la vérification de chaque requête pour déterminer si le fichier a été modifié. Cela entraîne un énorme gain de performance.

En outre, l'utilisation de apc_clear_cache() pour effacer le cache APC a tendance à entraîner une génération plus propre. Je suis tombé sur des conditions de course douteuses où certains fichiers seront construits avec des dépendances par rapport à d'autres qui n'ont pas encore été construits. Cela entraîne une vague d'erreurs FATAL. La seule mise en garde ici est que apc_clear_cache() doit être exécuté par Apache, vous aurez donc besoin de mettre en œuvre un wget ou quelque chose de similaire pour cela.

+0

Si je désactive apc.stat, cela signifie-t-il qu'un changement d'urgence dans le code entraînera APC ne pas reconnaître le changement? Par conséquent je devrais effacer le cache chaque fois que je fais une petite modification au code (sans refaire une construction entière)? – samxli

+0

C'est correct. L'inconvénient de cette méthode est que vous devez effectuer une compilation complète (svn export + cache clear), pour chaque changement de PHP, peu importe la taille. C'est idéal pour les sites construits peu fréquemment (quelques fois par jour). Si vous apportez des modifications à votre site de production toutes les quelques minutes, ce n'est pas une bonne méthode. Mais cela dépend vraiment de votre flux de travail. –