Page qui affiche une erreur 500 en prod mais pas en dev

a marqué ce sujet comme résolu.

Bonjour,

J’ai testé mon code en mode production et je suis confronté à une erreur 500 que je ne comprends pas puisqu’elle se produit en mode production uniquement et pas en mode dev, de plus je n’ai aucun log d’erreur qui se manifeste… de ce que j’ai pu me rendre compte cela viendrais de $read puisque quand je commente le manager->flush(); l’erreur disparaît. Cependant, la table de la base de données du site est identique en local ou sur mon serveur… voilà le code en question (je laisse plus bas le lien github du projet pour que vous puissiez parcourir les différents fichiers au cas où cela viendrais d’ailleurs)

#[Route('/forum/topic/{id}', name: 'forum.topic', methods: ['GET', 'POST'])]
public function index(
    ForumTopic $topic,
    MemberRepository $memberRepository,
    ReadingRepository $readingRepository,
    ForumForumRepository $repositoryCategory,
    ForumForumRepository $repositoryForum,
    ForumTopicRepository $repositoryTopic,
    ForumPostRepository $repositoryPost,
    PaginatorInterface $paginator,
    EntityManagerInterface $manager,
    Request $request
): Response
{  
 
    if($this->getUser())
    {
        $user = $this->getUser();
        $reading = $readingRepository->findOneBy(['user' => $user, 'topic' => $topic]);
         
        if ($reading === null) {
            $reading = new Reading();
            $reading->setUser($user);
            $reading->setTopic($topic);
        }
 
        $reading->setReadAt((new \DateTimeImmutable()));
 
        $manager->persist($reading);
        $manager->flush();
 
        $roles = $this->getUser()->getRoles();
         
        if (in_array('ROLE_MODERATOR', $roles)) {
            $categories = $repositoryCategory->findAll();
            $forums = $repositoryForum->findAll();
        }
    }
 
 
    /**
     * On récupère la liste des topics dans un arrray en fixant une limite à 20
     * @var array
     */
    $categories = null;
    $forums = null;
 
    $topic = $repositoryTopic->find(['id' => $topic]);
 
    // t = topic m = member mi = member_item
    $posts = $paginator->paginate(
        $repositoryPost
        ->createQueryBuilder('t')
        ->select('t', 'mi', 'm')
        ->leftJoin('t.author', 'm')
        ->leftJoin('m.item', 'mi')
        ->orderBy('t.createAt')
        ->where('t.topic = :id')
        ->setParameter('id', $topic->getId())
        ->getQuery()
        ->getResult(),
        $request->query->getInt('page', 1), 20);
 
    // Sanitize each ForumPost object in the paginated results
    foreach ($posts as $key => $post) {
        $posts[$key] = $this->htmlSanitizer->sanitizeObj($post);
    }
 
    $new_post = new ForumPost();
 
    $form = $this->createForm(PostType::class, $new_post);
 
    $form->handleRequest($request);
 
    if($form->isSubmitted() && $form->isValid())
    {
        $new_post = $form->getData();
        $new_post->setAuthor($this->getUser());
        $new_post->setTopic($topic);
        $manager->persist($new_post);
 
        $topic->setUpdateAt(new \DateTimeImmutable());
        $manager->persist($topic);
 
        $memberRepository = $this->getUser();
        $memberRepository->setExperience($memberRepository->getExperience() + 5);
        $manager->persist($memberRepository);
 
        $this->addFlash(
            'info-rpg',
            '+5xp (post forum)'
        );
 
        $manager->flush();
 
        $this->addFlash(
            'success',
            'Message créer avec succès'
        );
 
 
        return $this->redirectToRoute('forum.topic', ['id' => $topic->getId()]);
    }
 
    return $this->render($this->theme . '/forum/posts_list.html.twig', [
        'categories' => $categories,
        'forums' => $forums,
        'topic' => $topic,
        'posts' => $posts,
        'form' => $form,
    ]);
}

lien github : https://github.com/MrToine/v2.univers-toine

+0 -0

Salut,

  • Quand tu dis qu’il n’y a pas de logs, tu parles du var/log/prod.log, ou aussi du flux STDERR de PHP (par exemple /var/log/apache2/error.log avec un / devant le var) ?
  • Quand tu dis que ça marche en mode dev, c’est que ça marche en mode dev en local ou ça marche aussi en mode dev sur le serveur distant ?
  • Est-ce que tu as bien renseigné les username/password de ta base de données de prod dans ton fichier .env.local ?

Edit : Accessoirement, tu as mis un mot de passe dans ton fichier .env qui à mon avis n’est pas censé être public. Je t’invite à changer ce mot de passe au plus vite, puis à mettre à jour ta config et utiliser le fichier .env.local, non commité, pour les mots de passe qui n’ont pas vocation à traîner sur Internet :)

+2 -0

J’ai bien vérifier TOUT les logs et je n’ai aucun retour. Pour la BDD oui c’est bien renseigné car j’ai un retour des actus, du profil etc… Le mode dev marche effectivement sur le serveur (je l’ai tester quelques minutes)

Merci pour la fin de ton message je n’avais pas fais attention

Mhhhh effectivement c’est étrange.

J’aurais dit que la bdd de prod est corrompue mais ça ne tient pas avec le fait que ça marche en mode dev…

Là comme ça je n’ai pas trop d’idée, normalement une erreur 500 c’est forcément loggué quelque part, peut-être vérifier les options de log de ton serveur http, et si ça ne marche pas, cloner ton environnement de prod (code+environnement+config apache+bdd) pour debugger en local à base de try{} catch (\Exception $e) {var_dump($e->getMessage());} pour tenter d’y voir plus clair. C’est crade et c’est une mauvaise pratique (on n’utilise PAS de vraies données potentiellement personnelles pour du debugging), mais bon.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte