WordPress-Patch: Veröffentlichung von Beiträgen dauert sehr lange

15 02 2006

Manch­mal hat auch es auch sein Gutes, daß Owen Wink­ler die Hoheit über das WordPress-​Dashboard erlangt hat. Sein Blog Asym­pto­ma­tic ist ohne­hin lesens­wert und nun beschäf­tigte er sich mit der Pro­ble­ma­tik, daß Word­Press 2.0.1 beim Ver­öf­fent­li­chen von Pos­tings ewig lange, manch­mal unend­lich lange braucht. Er macht den Ping-​Service Pin­go­ma­tic dafür ver­w­ant­wort­lich, denn die­ser RPC–Dienst ist bei den meis­ten WordPress-​Installationen stan­dard­mä­ßig vor­ein­ge­stellt und bei der stän­dig wach­sen­den Zahl an WordPress-​Usern stark bean­sprucht. Das zeigt auch die Sta­tis­tik unter grab​perf​.org. Pin­go­ma­tic ist quasi rund um die Uhr voll aus­ge­las­tet. Owen begrün­det damit die lange War­te­zeit bis zur Ver­öf­fent­li­chung eines Bei­tra­ges und emp­fiehlt des­halb, einen bes­ser erreich­ba­ren Ser­vice zu nut­zen. Ein kur­zer Test mit einem der genann­ten Dienste scheint diese Theo­rie zu bestätigen.

Es ist jedoch auch eine andere Lösung mög­lich, denn seit dem 13.02. liegt im Word­Press Trac ein Patch zur Lösung des Pro­blems vor. Da eine instal­lier­bare Ver­sion die­ses Patches erst mit Miles­tone 2.1 zu erwar­ten ist, hier nun eine kurze Anlei­tung, wie er mit einem manu­el­len Ein­griff durch­ge­führt wer­den kann. Vor­her bitte in jedem Fall ein Backup der zu modi­fi­zie­ren­den Datein anle­gen (am bes­ten durch umbe­nen­nen auf dem Server).

1. Modi­fi­ka­tion der Datei /wp-includes/default-filters.php. Die Zeile Nr. 85

add_action('publish_post', 'generic_ping');

ist ersatz­los zu löschen.

2. Modi­fi­ka­tion der Datei /wp-admin/execute-pings.php. In Zeile Nr. 25 ist fol­gen­des einzufügen:

generic_ping();

Das Pro­blem lag also darin, daß die Aus­lö­sung des Pings expli­zit mit der »Publish-Post«-Aktion ver­bun­den war, so daß die Rück­kehr zum Admin-​Panel erst mög­lich war, wenn der Ping vor­ge­nom­men wurde (default-filters.php). Das Pin­gen an sich, wurde nun in die sepa­rate Datei execute_pings.php aus­ge­la­gert, mit der Folge, daß der Ping unab­hän­gig von der Ver­öf­fent­li­chung des Bei­tra­ges ist und diese wie­der mit »nor­ma­ler Geschwin­dig­keit« erfolgt. Für ganz Faule hier die bei­den kor­ri­gier­ten Dateien zum Download:

Patch: Publish takes long time (some say fore­ver)
Down­load: changeset-3524.zip (1.271 Bytes)

Das ganze natür­lich ohne jeg­li­che Gewähr auf Funk­ti­ons­tüch­tig­keit, in der Pra­xis funk­tio­niert es bei mir aber zur volls­ten Zufrie­den­heit. (Noch mal: vor­her Backup der bei­den Dateien anlegen).

Hin­weis: Auf Grund eines Kom­men­ta­res von Owen noch mal zur Klar­stel­lung: Der Ping selbst wird durch die Modi­fi­ka­tion im Hin­ter­grund aus­ge­führt. Dadurch erhält man aber im Zwei­fels­fall keine Rück­mel­dung, ob Pin­go­ma­tic tat­säch­lich erreicht und der Ping erfolg­reich durch­ge­führt wurde.