Domanda

Di recente abbiamo abilitato APC sui nostri server, e occasionalmente quando pubblichiamo un nuovo codice o modifiche scopriamo che i file sorgente che sono stati modificati iniziano a generare errori che non si riflettono nel codice, di solito analizzano gli errori che descrivono un token che non esiste. Lo abbiamo verificato eseguendo php -l sui file che i log degli errori dicono siano interessati. Di solito una ripubblicazione risolve il problema. Stiamo usando PHP 5.2.0 e APC 3.01.9. La mia domanda è: qualcun altro ha riscontrato questo problema o qualcuno riconosce qual è il nostro problema? In tal caso, come è stato risolto o come è stato possibile risolverlo?

Modifica: probabilmente dovrei aggiungere alcuni dettagli sul nostro processo di pubblicazione. Il contenuto viene inviato ai server di produzione tramite rsync da un server di gestione temporanea. Abbiamo abilitato apc.stat_ctime perché ha detto che questo aiuta a rendere le cose più fluide con rsync. apc.write_lock è attivo per impostazione predefinita e non lo abbiamo disabilitato. Idem per apc.file_update_protection .

È stato utile?

Soluzione

Sembra che un file parzialmente pubblicato venga letto e memorizzato nella cache come non funzionante. apc.file_update_protection è progettato per aiuta a fermarlo.

in php.ini: apc.file_update_protection intero

  

apc.file_update_protection   mette in ritardo la memorizzazione nella cache nuova di zecca   File. L'impostazione predefinita è 2 secondi quali   significa che se la modifica   il timestamp (mtime) su un file lo mostra   ha meno di 2 secondi quando   si accede, non verrà memorizzato nella cache.   La sfortunata persona che ha avuto accesso   questo file scritto a metà vedrà ancora   stranezza, ma almeno non lo farà   persistere.

Seguendo la domanda in fase di modifica: uno dei motivi per cui non vedo questo tipo di problemi è che invio una copia completamente nuova del sito (con esportazione SVN). Solo dopo che è completamente completato diventa visibile ad Apache / Mod_php (vedi la mia risposta Come iniziare a distribuire applicazioni PHP da un repository di sovversione? )

L'altra cosa che può accadere, ovviamente, è che se si aggiorna sul posto, è possibile che si stiano aggiornando file che dipendono da altri che non sono stati ancora caricati. Rsync può garantire solo aggiornamenti atomici per singoli file, non l'intera raccolta che viene modificata / caricata. Un altro motivo per cui penso di caricare il sito in massa e solo successivamente metterlo in uso.

Altri suggerimenti

Sembra che APC non stia eseguendo preforme o ricevendo le informazioni corrette sulle statistiche dei file. Puoi verificarlo per assicurarti che la configurazione APC apc. stat è impostato correttamente. Un'altra cosa che potresti fare è forzare la cancellazione della cache con apc_clear_cache ( ) quando pubblichi un nuovo codice.

Non l'ho mai visto prima, anche se sono un grande utente di APC. Forse provare ad attivare uno script che svuota il codice operativo APC ogni volta che invii un nuovo codice sul server?

Quando si ottiene un file con un errore di analisi, eseguirne il backup, quindi ripetere l'operazione. Prendi lo stesso file che ora funziona e fai una differenza con il file con l'errore di analisi.

ctime significa tempo di creazione. Dovrai svuotare manualmente l'intera cache ogni volta che esegui aggiornamenti.

Puoi farlo facilmente, mettendo lo script apc.php da qualche parte sul tuo server. Questo script fornisce statistiche sulla cache e ti consente di eliminare completamente la cache.

Lo script viene fornito con APC.

Spero che i suoi aiuti, Evert

Questo probabilmente sta accadendo perché c'è una discrepanza tra il tuo codice e le versioni memorizzate nella cache del codice.

Ad esempio, APC ha una versione cache di User.php, ma hai apportato modifiche a User.php o ai dati utilizzati dall'utente. La versione cache è ancora in esecuzione anche dopo la distribuzione, perché non è ancora scaduta.

Se si cancellano le voci della cache APC durante la distribuzione, questo problema dovrebbe scomparire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top