Frage

Wir haben vor kurzem freigegeben APC auf unseren Servern und gelegentlich wenn wir neuen Code oder Änderungen veröffentlichen wir fest, dass die Quelldateien, die geändert wurden werfen Fehler beginnen, die nicht in dem Code reflektiert werden, in der Regel Fehler analysieren einen Token zu beschreiben, die nicht existieren. Wir haben dies durch Ausführen überprüft php -l auf die Dateien die Fehlerprotokolle sagen betroffen sind. Normalerweise wird eine erneute Veröffentlichung behebt das Problem. Wir verwenden PHP 5.2.0 und APC 3.01.9. Meine Frage ist, hat jemand dieses Problem erfahren, oder hat jemand erkennen, was unser Problem ist? Wenn ja, wie haben Sie es zu beheben oder wie könnten wir das Problem beheben?

Edit: Ich sollte wahrscheinlich einige Details über unsere Publishing-Prozess hinzufügen in. Der Inhalt wird auf die Produktionsserver über rsync von einem Staging-Server geschoben. Wir aktiviert apc.stat_ctime, weil es sagte, dies hilft, die Dinge glatter laufen mit rsync. apc.write_lock ist standardmäßig aktiviert, und wir haben es nicht deaktiviert. Das Gleiche gilt für apc.file_update_protection.

War es hilfreich?

Lösung

Klingt wie ein Teil veröffentlichte Datei gelesen wird und als defekt zwischengespeichert. apc.file_update_protection ist so konzipiert, helfen, diese zu stoppen.

in der php.ini: apc.file_update_protection integer

  

apc.file_update_protection Einstellung   legt eine Verzögerung auf Caching brandneue   Dateien. Der Standardwert ist 2 Sekunden, was   Wenn die Änderung bedeutet, dass   Zeitstempel (mtime) auf eine Datei zeigt, dass   es ist weniger als 2 Sekunden alt, als es   zugegriffen wird, wird es nicht zwischengespeichert werden.   Die unglückliche Person, den Zugriff auf   diese Halb geschrieben Datei wird noch sehen   Seltsamkeit, aber zumindest wird es nicht   fortdauern.

Im Anschluss an der Frage bearbeitet: Ein Grund, warum ich nicht diese Art von Problemen sehen, dass ich eine ganz neue Kopie der Seite drücken (mit SVN-Export). Erst danach wird voll ist es geworden visable zu Apache / mod_php abgeschlossen (siehe meine Antwort Wie die Bereitstellung von PHP-Anwendungen von einer Subversion-Repository loszuzulegen? )

Das andere, was natürlich passieren kann, ist, dass, wenn Sie an Ort und Stelle aktualisieren, können Sie Dateien aktualisieren werden, die von anderen abhängig, die noch nicht hochgeladen. Rsync kann nur Atom-Updates für einzelne Dateien gewährleisten, nicht die gesamte Kollektion, die geändert / hochgeladen werden. Ein weiterer Grund, warum ich denke, die Website laden en-Masse, und erst dann in Betrieb genommen werden.

Andere Tipps

Es klingt wie APC ist nicht Vorformen oder die richtige Datei Wertedaten zu bekommen. Sie könnten überprüfen Sie es sicher, dass die APC-Konfiguration apc zu machen. stat richtig eingestellt ist. Eine andere Sache, die Sie tun könnten, es der Cache löschen mit apc_clear_cache ( ), wenn Sie neuen Code veröffentlichen.

sah nie zuvor, auch wenn ich ein großer Nutzer von APC bin. Vielleicht versuchen, ein Skript auslösen, der die APC Opcode leer jedes Mal wenn Sie neuen Code auf dem Server senden?

Wenn Sie eine Datei mit einem Parse-Fehler bekommen, es wieder nach oben, dann repubish. Nehmen Sie die gleiche Datei, die jetzt funktioniert und tut ein Diff gegen die Datei mit dem Parse-Fehler.

Ctime bedeutet Erstellungszeit. Sie wollen jedes Mal manuell den gesamten Cache Sie Updates tun spülen.

Sie können dies leicht tun, indem Sie den apc.php Skript irgendwo auf Ihrem Server setzen. Dieses Skript gibt Ihnen Statistiken Cache und ermöglicht es Ihnen, den Cache ganz fallen zu lassen.

Das Script kommt mit APC.

Hopet sein hilft, Evert

Dies ist wahrscheinlich geschieht, weil ein Konflikt zwischen Ihrem Code ist, und die zwischengespeicherten Versionen des Codes.

Zum Beispiel hat APC eine Cache-Version von User.php, aber Sie Änderungen an User.php oder zu den Daten, die Benutzer verwendet. Die Cache-Version noch läuft auch nach dem deploy, weil es noch nicht abgelaufen ist.

Wenn Sie Ihre APC-Cache-Einträge zu löschen, wenn Sie bereitstellen, sollte dieses Problem verschwinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top