Drupal
Symptome:
* Der Drupal-Cron läuft nicht durch.
* Im DB-Log steht, dass Cron das Zeitlimit überschritten habe und darum abgebrochen worden sei.
* Direkt davor steht eine "Access Denied"-Meldung für den Pfad node/14, was auf diesem System die öffentlich zugängliche(!) Startseite ist.
Ich: WTF?
Hinweise:
* Die Meldung mit dem Zeitlimit ist offensichtlich falsch und irreführend, da cron diese Meldung schon nach wenigen Sekunden bringt, auch wenn max_execution_time mit php_admin_value auf 1500 Sekunden festgenagelt ist.
* Wird der Drupal-Cron eingeloggt als Admin-Nutzer angeworfen, läuft er durch.
Lösung:
* Ein bestimmtes Modul im System, das die Zugriffskontrolle für einen bestimmten Inhaltstyp implementiert, tut das in hook_nodeapi, $op == 'view' (offensichtlich die falsche Stelle dafür, das ist der Bug).
* Anonyme Nutzer dürfen Knoten dieses Typs nicht ansehen.
* Der Indexaufbau für die Suche, der von cron erledigt wird, fordert aber den gerenderten Knoten an.
* Läuft Cron als anonymer Nutzer so steigt der Code mit drupal_access_denied aus.
* Offenbar wird cron.php beim Loggen des Zugriffsfehlers als Startseite gewertet (vermutlich ist q nicht gesetzt). Deshalb das node/14 in der Fehlermeldung.
* Steigt cron wie in diesem Fall mit einem exit() aus, so wird dennoch die von Drupal registrierte Shutdown-Funktion aufgerufen. Die aber loggt stur einen Zeitüberschreitungsfehler, egal was tatsächlich passiert ist. Aua.
Ein paar Dinge an Drupal 6 (inkl. Module), die zumindest für mich nicht offensichtlich waren und mir einiges Kopfzerbrechen bereitet haben:
- Die Admin-Maske zum Organisieren von Menüs (z.B. admin/build/menu-customize/navigation für das Navigationsmenü) zeigt keine Links an, die auf unveröffentlichte Knoten zeigen (auch nicht bei Nutzern, die den unveröffentlichten Inhalt sehen dürfen). Sobald der Inhalt dann veröffentlicht wird, erscheint der neue Menüeintrag einfach.
- Keine Bindestriche in Theme-Namen verwenden. Funktioniert zwar, aber Hooks, die den Theme-Namen als Teil ihrer Namenskonvention enthalten, lassen sich dann nicht implementieren, da PHP keine Bindestriche in Funktionsnamen zulässt. Unterstriche sind Ok.
- Bei einem neu angelegtem Theme kann es wichtig sein, mindestens einmal die themespezifische Konfiguration zu speichern. Die Defaultwerte, mit denen das Formular vorausgefüllt wird, sind nicht unbedingt identisch mit denen, die tatsächlich verwendet werden, solange die Konfiguration nicht in der DB steht. Erst nach Abschicken des Formulars (selbst ohne irgendeine Änderung an den Werten) kann man sicher sein, dass die angezeigten Werte auch verwendet werden. Konkreter Fall: Ein neu angelegtes, von Zen über zwei Ebenen abgeleitetes Theme (zen -> Haupttheme -> Untertheme). Der Bread-Crumb-Trail wurde nicht angezeigt, obwohl der Haken in der Theme-Konfiguration beim Aufruf angezeigt wurde. Erst nach Druck auf den Speicherknopf erschien der BCT.
- Ein analoges Phänomen gibt es bei den feldspezifischen Anzeige-Einstellungen für CCK-Felder (die Tabs, auf denen festgelegt wird, welche Felder bei der Knotenanzeige angezeigt werden sollen, welche in den Volltextindex gehen sollen, etc.)
- Keine Unterstriche in den Pfaddefinitionen in Menüeinträgen verwenden. Funktioniert zwar, aber die Gruppierung in der Hierarchie nicht. Z.B.: Bei den beiden Einträgen 'admin/abc_def' und 'admin/abc_def/ghi_jkl' erscheint der zweite auf der selben Ebene wie der erste, statt unter dem ersten.
- Falls auf der Suchergebnisseite der apachesolr-Suche der Bread-Crumb-Trail nur einen Link zur Startseite zeigt und nicht zusätzlich "Suche" und das Suchwort, dann kann das daran liegen, dass Solr schlicht nicht erreicht werden kann (z.B. weil Solr gar nicht läuft).
- Wenn der Drupal-Cron sich mit der Watchdog-Meldung verabschiedet, dass das Zeitlimit überschritten sei und er deshalb abgebrochen worden sei, dann muss das nicht stimmen. Siehe auch hier.
- In der derzeitigen Implementierung von drupal_html_to_text() funktioniert die Extraktion von URLs aus Links nicht, wenn die zugehörige Link-Beschriftung ein Newline enthält. Siehe Bug #309343. Das wirkt sich z.B. auf den generierten Plaintext des mimemail-Moduls aus.
- Das mimemail-Modul packt standardmäßig alles CSS der Seite mit in die E-Mail, und versucht es vorher zu komprimieren (selbst ohne das optionale CSS-Compressor-Modul). Dadurch geht der CSS-Code 1. kaputt, und 2. werden alle Newlines entfernt, was leicht zu nach RFC 2046 ungültig kodierten E-Mails führen kann. Siehe Bug #448670. Workaround für den Fall, dass man das CSS in den E-Mails gar nicht braucht: Im Default-Theme-Ordner eine leere Datei mail.css anlegen.
Robert Douglass explains the Drupal Search Framework
And here are the search API docs for drupal 6.
Auf drupalmodules.com werden Drupal-Module vorgestellt und von Entwicklern bewertet, die die Module in ihren Projekten benutzt haben.
For Drupal development and administration:
coder module: Checks code against rules (coding standards, basic security checks)
devel module: Debug functions for developers
admin_menu module: Menu for drupal administrators
schema module: Extends the functionality around the schema API of Drupal 6
Hier zwei Vergleiche der beiden Systeme:
http://www.e-moves.de/Drupal-vs-Joomla
http://www.achmist.de/blog/drupal-vs-joomla.html
Und die große CMS-Vergleichsseite cmsmatrix.org
Update: Verzeichnis für freie Software http://opensource.yeebase.com/