Drupal + searchApi + SearchStax : résoudre l'erreur « internal server error »

Étrange souci que j'ai rencontré sur un projet Drupal avec searchApi relié à SearchStax.

Sur certaines page j'avais un code retour 500 « internal server error » alors que beaucoup d'autres fonctionnaient sans souci... Pas vraiment de log sur Searchstax pour creuser, ni d'option de debug. Le plus étrange, la même requête dans postman répondait correctement, mais en la faisant via le binaire curl, erreur aussi.

Cela semblait arriver sur les très grosses requêtes, sur une de celles qui posait souci, le body de la requête était proche de 8ko, oui, plus de 8000 caractères.

En finissant par comparer les headers, la solution se trouvait dans le « Accept-Encoding: gzip » présent par défaut dans postman. En l'ajoutant à la requête curl, c'est ok.

J'ai donc utilisé un event pour l'ajouter à l'ensemble des requêtes searchApi :

mon_module/src/EventSubscriber/MonModuleSearchSubscriber.php

<?php
namespace Drupal\mon_module\EventSubscriber;

use Solarium\Core\Event\PostCreateRequest as PostCreateRequestEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Pop_produit event subscriber.
 */
class MonModuleSearchSubscriber implements EventSubscriberInterface {

  public static function getSubscribedEvents(): array {
    return [
      PostCreateRequestEvent::class => ['postCreateRequestAddHeader'],
    ];
  }

  public function postCreateRequestAddHeader(PostCreateRequestEvent $e) {
    $request = $e->getRequest();
    $request->addHeader('Accept-Encoding: gzip');
  }
}

 

Plus d'erreur, mais on se retrouve maintenant avec une réponse encodée en gzip, il faut la décoder, pas possible d'utiliser un event ici, j'ai donc du faire un patch pour le fichier search_api_solr/Plugin/search_api/backend/SearchApiSolrBackend.php : 

diff --git a/src/Plugin/search_api/backend/SearchApiSolrBackend.php b/src/Plugin/search_api/backend/SearchApiSolrBackend.php
index 752df404..0af49932 100644
--- a/src/Plugin/search_api/backend/SearchApiSolrBackend.php
+++ b/src/Plugin/search_api/backend/SearchApiSolrBackend.php
@@ -1930,6 +1930,9 @@ class SearchApiSolrBackend extends BackendPluginBase implements SolrBackendInter
         // Send search request.
         $response = $connector->search($solarium_query, $this->getCollectionEndpoint($index));
         $body = $response->getBody();
+        if (@gzdecode($body) !== FALSE) {
+          $body = gzdecode($body);
+        }
         if (200 != $response->getStatusCode()) {
           throw new SearchApiSolrException(strip_tags($body), $response->getStatusCode());
         }

et l'ajouter à mon composer.json (voir plus bas pour en savoir plus sur les patchs et composer) : 

        "patches": {
            "drupal/search_api_solr": {
                "Gzip Encoding": "./files/patches/search_api_solr_gzip_encoding.patch"
            }
        }

C'est pas fou, il y a peut-être une solution plus propre, mais j'espère que ça aidera quelqu'un car les ressources sur le sujet semblent inexistantes. La page searchstax concernant ce code d'erreur ne donne aucune piste pointant sur ce genre de solution.

Merci Romain pour m'avoir mis sur la bonne piste !

 

Contenus en rapport

Drupal & Composer - Appliquer un patch dans le fichier composer.json

Si vous utilisez composer pour gérer votre instance de Drupal, vous avez parfois besoin d'appliquer un patch (de votre conception ou depuis drupal.org) que ce soit pour un module tiers ou pour le core.

Si on est "à l'ancienne" on a le core et les module sous gestionnaire de version (git par exemple), cela reste simple, vous appliquez le patch et commitez le tout.

Commentaires

Grow Your Asphalt Paving Business with Digital Marketing
In today’s competitive landscape, having a strong online presence is essential for asphalt paving contractors. Customers are increasingly turning to the internet to find local services, and if your business isn’t visible online, you’re missing valuable opportunities. Digital marketing—such as SEO, web design, lead generation, and Google Business Profile optimization—can help you reach more clients, generate leads, and grow your business.

Partnering with <a href="https://asphaltpavingmarketers.com/">Paver Marketers</a> can give your paving business the tools it needs to succeed in the digital world.

Why Digital Marketing Matters for Paving Contractors
Asphalt paving businesses need digital marketing to:

Increase Visibility: Show up in local search results when customers are searching for paving services.
Generate Leads: Attract and convert visitors into customers through effective lead generation strategies.
Enhance Engagement: Build trust and engage with customers on social media, email, and Google.
Track Results: Measure success and optimize campaigns for the best ROI.
Best Digital Marketing Services for Asphalt Paving Contractors
1. SEO for Asphalt Paving Contractors
SEO helps your business rank higher in search results for local keywords, making it easier for customers to find you online. Local SEO, keyword optimization, and content creation are key to improving your visibility.

2. Web Design for Asphalt Paving Contractors
A well-designed, responsive website helps convert visitors into leads. A clean, user-friendly website that’s optimized for mobile and search engines can significantly boost your business.

3. Google Business Profile Optimization
Optimizing your Google Business Profile increases your local visibility, builds trust with customer reviews, and helps customers find your business easily.

4. Lead Generation Services
Lead generation strategies like PPC, landing pages, and email marketing help attract potential clients who are actively searching for paving services and turn them into paying customers.

FAQs
1. How does SEO help my business?
SEO improves your website’s ranking in search results, making it easier for customers to find your paving services online.

2. Why is a good website essential for my business?
A well-designed website helps convert visitors into customers and plays a crucial role in SEO.

3. How does Google Business Profile optimization help my business?
It improves local visibility, builds trust through reviews, and ensures your business shows up in local searches.

4. What is lead generation, and how can it help my business?
Lead generation attracts and nurtures potential customers, turning them into loyal clients.

Start leveraging digital marketing today with <a href="https://asphaltpavingmarketers.com/">Paver Marketers</a> and watch your asphalt paving business thrive!

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...