Wie Searchindex manuell erstellen, ohne cron?
am 03.01.2015 - 12:03 Uhr in
Hallo zusammen,
ich habe auf meiner Entwicklungsumgebung mit Xampp eine Kopie meiner Live-Drupalseite.
Jetzt muss ich am template search-result--node.tpl.php eine Änderung vornehmen (anderes Design gewünscht etc.) Leider kann ich das nicht testen, da die Suche auf meinem localhost keinerlei Ergebnisse ausgibt. Hintergrund ist, dass dort die Seite nicht indiziert ist. Der Cronlauf hängt sich aber dauernd auf.
Frage: im Grunde ruft cron doch nichts anderes auf als eine Funktion irgendwo in den Tiefen des System, die dann eine bestimmte Zahl nodes für die Suche indiziert. Diese Funktion würde ich nun gerne manuell aufrufen, ohne Cron, z.B. über einen Menu-Hook, denn dann würde ich nicht alle anderen Cron-Aktivitäten mitschleppen.
Hat jemand einen Tipp für mich wie ich die Suche manuell indizieren kann? Im Grunde brauche ich nur 10 Sucheinträge, um das Template zu testen.
Danke & Grüße, rhodes
- Anmelden oder Registrieren um Kommentare zu schreiben
Auf dem localhost solltest Du
am 03.01.2015 - 12:37 Uhr
Auf dem localhost solltest Du doch die Einstellung in der php.ini so setzen können, daß es paßt, also memory_limit, max_execution_time und max_input_time. Den Cron mußt Du dann zwar von Hand aufrufen, aber aufhängen sollte er sich nicht.
Es gibt aber noch eine andere Möglichkeit. Wenn Du mit Backup & Migrate die Datenbank vom Server auf die lokale Installation transferierst, wird in den Default-Einstellungen der Search-Index nicht mitgenommen. Das ist im Bereich Einstellungs-Profile unter "Daten aus den folgenden Tabellen ausschließen" zu finden und läßt sich dort ändern. Die Caches und den Watchdog sollte man ausgeschlossen lassen. Damit übernimmst Du dann die fertigen Indizes auf Deine lokale Installation.
siehe Funktion "search_cron()"
am 04.01.2015 - 13:17 Uhr
Wenn der Cron nicht läuft, gibt's da wohl noch andere Problem unter der Haube. Aber wenn die Aufgabe nur das Theming betrifft und man nicht dafür bezahlt wird, die andere Probleme zu lösen, dann muss halt etwas in den Such-Index ohne cron. Noch einen neuen Dump inkl. Search-Tabelle zu machen oder gar vom Kunden anzufordern ist auch nicht unbedingt optimal. Bei D7 hatte ich das zwar noch nicht aber bei D6 häufig, daß sich in dem Such-Index inkonstemte Daten aus SQL-Sicht verbergen, die sich zwar noch exportieren lassen aber ohne Tricks schlecht wieder importieren lassen. Search_Api bietet zum direkten Indexieren eine GUI, die ich zur Zeit auch gerne nutze aber auch nur für erste Tests (danach kommt drush zum zug). Für die betagte interne Suche, die vor allem auch aufgrund von Limits in MySQL gerne ersetzt wird, hat da wohl niemand etwas programmiert. Eine erst kleine Modul-Suche ergab ad hoc kein Modul dafür. Aber es ist im Grunde wie vermutet nicht wirklich schwierig:
Lösung:
Ich habe mal kurz ein Blick in das search.module vom Core geworfen und die Funktion search_cron(), die im Cron-Lauf aufgerufen wird, macht nicht viel anderes als die entsprechenden Hooks der anderen Module aufzurufen, die den Index befüllen. Also kann man man auch "search_cron();" direkt aufrufen habe ich mir gedacht und das auch getestet. Für solche kleinen Test-Szenarien würde ich mir aber nichts mit hook_menu basteln. Da kann man z.B. "
drush eval 'search_cron();
'" aufrufen oder irgendwo anders den Befehl aufrufen, wo man PHP innerhalb von Drupal ausführen kann. Das devel.module bietet dafür auch eine Möglichkeit. In vorliegendenFall auf dem Test-System, das nur der Theme-Entwicklung dient, würde ich dafür sogar den PHP-Filter und einen Node dafür nutzen.Vielen Dank...
am 04.01.2015 - 13:22 Uhr
ich konnte es jetzt über die advanced Einstellungen im Backup lösen und habe dann den Dump mit dem Suchindex in die DB auf dem localhost eingespielt. Perfekt.
There is a module for that
am 04.01.2015 - 13:47 Uhr
Gut, wenn es Zugriff auf das andere System gibt, dann halt so.
Ich habe aber gerade noch bevor ich mein Such-Fenster geschlossen habe noch das Modul "reindex" entdeckt, das genau diese Funktion nachliefert. Auf der Modulseite steht aber auch der Hinweis, daß Drush eine eigene Funktion dazu hat und es dafür einen passenden befehl gibt mit
drush search-reindex --immediate