- Blog du CMS RedDot
- 15.11.2019
- FR
rdb: Débogage ASP Pré-exécuté (classique)
Le problème
Je suis sûr qu’à peu près tous les développeurs de serveurs de gestion de solutions Web CMS RedDot se seraient heurtés à un ASP pré-exécuté dans leurs modèles qui a échoué. La frustration qui en résulte de ne pas avoir de méthode de débogage intégrée ou même simplement d’obtenir une sorte de message d’erreur significatif du CMS WSMS est l’un des désagréments les plus discutés du produit. Bien sûr, il y a le plug-in de débogage pré-exécution, mais pour l’utiliser, des modifications doivent être apportées au serveur RDServer.fichier ini. Ces modifications peuvent rendre un projet inutilisable ou même bloquer le serveur de gestion des solutions Web CMS RedDotererr server server (j’ai expérimenté les deux scénarios à plusieurs reprises). Ce dernier peut bien sûr être corrigé par un redémarrage, mais s’il s’agit d’un système de production chargé, ce n’est tout simplement pas pratique.
Sûrement, il doit y avoir un moyen de sortir ces erreurs du système et de les renvoyer au développeur?
La solution
Je ne sais pas si je suis la première personne à y penser mais je ne l’ai pas vue discutée auparavant, donc j’espère que c’est une information utile.
Un arrière-plan
L’ASP pré-exécuté est rendu par CMS WSMS avant d’être passé à IIS pour s’exécuter. Le code résultant est renvoyé au CMS WSMS pour inclusion dans la page. Bien que vous ne le voyiez pas, si l’ASP échoue, une erreur 500 est générée par IIS. Malheureusement, ces informations sur l’erreur 500 sont perdues lorsque les données sont transmises entre CMS WSMS et IIS et inversement.
Entrez la page d’erreur personnalisée
Sous IIS, il est possible de définir une page d’erreur personnalisée pour chaque type d’erreur qui se produit sur le serveur Web. Ceci est traditionnellement utilisé pour fournir aux utilisateurs finaux une page 404 significative sur les sites Web publiés. Nous pouvons tirer parti de cette fonctionnalité pour définir une page d’erreur personnalisée pour une erreur 500 sur le serveur CMS WSMS. En plus de cela, les employés de Microsoft ont vu clair pour fournir également un objet d’erreur qui n’est disponible qu’à partir d’une erreur 500 et renvoie un tas d’informations utiles sur l’erreur. Ainsi, nous pouvons capturer les informations d’erreur et les enregistrer dans un fichier.
Le processus
La première chose à faire est de créer des dossiers.
- Sous votre dossier CMS WSMS (CMS/ASP), créez un dossier appelé « PreExecute ».
- Sous le nouveau dossier, créez deux autres appelés « logs » et « asp ». Le compte IUSR de la machine doit avoir un accès en écriture aux deux dossiers.
Ensuite, nous devons définir les paramètres RDExecute et PreExecute.
- Dans votre projet, sous « Administrer les Paramètres du projet » > « Projet » > « Paramètres généraux », sélectionnez « Modifier les paramètres » dans le Menu Action.
- Sous « Paramètres RDExecute et PréExecute », définissez le « Chemin physique » sur « C:\Program Files\RedDot\CMS\ASP\PreExecute\asp » (ou le chemin d’accès à votre dossier si votre installation est différente) et le « Répertoire virtuel (IIS) » vers « /CMS/PreExecute/asp/ »
À ce stade, vérifiez que votre pré-exécution fonctionne toujours dans votre projet.
Maintenant, pour créer le gestionnaire d’erreurs personnalisé.
- Créez un fichier ASP sous votre dossier CMS/ASP/PreExecute/asp, appelez-le comme vous le souhaitez, quelque chose comme ASPError.ASP.
- Copiez le code suivant dans le fichier:
<% ' Create the error object. Dim objASPError Set objASPError = Server.GetLastError ' Write the error information to a file (formatting of the second argument is for readability only). WriteToFile "C:\Program Files\RedDot\CMS\ASP\PreExecute\logs\PreExecuteErrors_" & Year(Now) & Month(Now) & Day(Now) & ".log", " Date/Time: " & Now() & vbCrLf & " ASP Code: " & objASPError.ASPCode & vbCrLf & "ASP Description: " & objASPError.Description & vbCrLf & " Category: " & objASPError.Category & vbCrLf & " Column: " & objASPError.Column & vbCrLf & " Description: " & objASPError.Description & vbCrLf & " File: " & objASPError.File & vbCrLf & " Line: " & objASPError.Line & vbCrLf & " Number: " & objASPError.Number & vbCrLf & " Source: " & objASPError.Source & vbCrLf & "############################################################" & vbCrLf, True Function WriteToFile(FileName, Contents, Append) On Error Resume Next If Append = True Then iMode = 8 Else iMode = 2 End If Dim oFs, oTextFile Set oFs = Server.CreateObject("Scripting.FileSystemObject") Set oTextFile = oFs.OpenTextFile(FileName, iMode, True) oTextFile.Write Contents oTextFile.Close Set oTextFile = Nothing Set oFS = Nothing End Function %>
Enfin, nous devons configurer IIS.
- Dans le Gestionnaire des Services d’information Internet (IIS), sélectionnez le dossier sous « Site Web par défaut » (ou le site que vous utilisez pour les CMS WSMS) > « CMS » > « Préexécuter » > « asp ».
- Cliquez avec le bouton droit sur le dossier et sélectionnez « Propriétés ».
- Sélectionnez l’onglet « Erreurs personnalisées ». Faites défiler jusqu’à ce que vous trouviez « 500; 100 » dans la colonne d’erreur HTTP.
- Mettez-le en surbrillance et cliquez sur « Modifier… ».
- Remplacez « Type de message: » par « URL » et définissez « URL: » sur « /CMS/PreExecute/asp/ASPError.asp »
Tester
Pour tester, c’est assez simple. En supposant que votre pré-exécution fonctionnait plus tôt, vous devriez pouvoir ajouter du code ASP cassé à votre modèle (par exemple <!IoRangePréExécute > <%= functionThatDoesNotExist() %><!/IoRangePreExecute >) et prévisualisez la page. Vous devriez obtenir la page d’erreur CMS WSMS standard (lire inutile), mais vous devriez également obtenir un fichier journal créé dans votre dossier CMS / ASP / PreExecute / logs avec des informations détaillées sur l’erreur ASP qui s’est produite.
Avertissements
Si vous utilisez un CMS en cluster, vous voudrez peut-être faire attention à cette procédure. Lorsque j’ai essayé de modifier les paramètres de pré-exécution dans un environnement CMS WSMS en cluster, non seulement cela n’a pas fonctionné, mais il a également supprimé la publication de TOUS les projets. Je n’ai pas enquêté davantage à ce stade, si et quand je le ferai, je publierai mes conclusions.
ASP.NET
La méthode décrite ci-dessus ne fonctionne que pour l’ASP classique. Ce serait génial si quelqu’un décrivait le processus équivalent pour ASP.NET . Des preneurs?