- Reddot Cms Blog
- 15.11.2019
- sv
rdb: Debugging Pre-Executed (classic) ASP
problemet
jag är säker på att ganska mycket varje Reddot CMS Web Solutions Management Server utvecklare skulle ha kommit upp mot några pre-executed ASP i sina mallar som har misslyckats. Den efterföljande frustrationen över att inte ha någon inbyggd metod för felsökning eller till och med bara få något slags meningsfullt felmeddelande ur CMS WSMS är en av de mest diskuterade irritationerna av produkten. Visst, det finns Pre-Execute Debugger plug-in men för att använda det måste ändringar göras i RDServer.INI-fil. Dessa ändringar kan göra ett projekt oanvändbart eller kan till och med krascha Reddot CMS Web Solutions Management Server …err… server (Jag har upplevt båda scenarierna flera gånger). Det senare kan naturligtvis fixas med en omstart, men om det här är ett upptaget produktionssystem är det bara inte praktiskt.
visst måste det finnas något sätt att få dessa fel ut ur systemet och tillbaka till utvecklaren?
lösningen
jag vet inte om jag är den första personen att tänka på detta, men jag har inte sett det diskuteras innan så förhoppningsvis är användbar information.
en del bakgrund
Pre-executed ASP återges av CMS WSMS innan de skickas till IIS för att köra. Den resulterande koden skickas tillbaka till CMS WSMS för att inkluderas på sidan. Även om du inte ser det, om ASP misslyckas, genereras ett 500-fel av IIS. Tyvärr förloras denna information om 500-felet när data skickas mellan CMS WSMS och IIS och tillbaka igen.
ange sidan Anpassad fel
Under IIS är det möjligt att ställa in en anpassad felsida för varje typ av fel som uppstår på webbservern. Detta används traditionellt för att ge slutanvändarna en meningsfull 404-sida på publicerade webbplatser. Vi kan utnyttja denna funktion för att ställa in en anpassad felsida för ett 500-fel på CMS WSMS-servern. Utöver detta har folket på Microsoft sett sig klart för att också ge ett Felobjekt som bara är tillgängligt från ett 500-fel och returnerar en massa användbar information om felet. Således kan vi fånga felinformationen och logga den till en fil.
processen
det första vi behöver göra är att skapa några mappar.
- Under din CMS wsms mapp (CMS/ASP), skapa en mapp som heter ”PreExecute”.
- under den nya mappen skapar du ytterligare två som heter ”loggar” och ”asp”. Maskinens iusr-konto ska ha skrivåtkomst till båda mapparna.
nästa måste vi ställa in inställningarna för RDExecute och PreExecute.
- i ditt projekt, under ”administrera Projektinställningar” > ”projekt” > ”Allmänna inställningar”, välj ”Redigera Inställningar” från åtgärdsmenyn.
- under” rdexecute och PreExecute inställningar”, Ställ in ”fysisk sökväg” till ”C:\Program Files\RedDot\CMS\Asp\PreExecute\asp” (eller sökvägen till din mapp om din installation är annorlunda) och ” Virtual directory (IIS)” till ”/CMS / PreExecute/asp/”
Kontrollera nu att din förkörning fortfarande fungerar i ditt projekt.
nu för att skapa den anpassade felhanteraren.
- skapa en asp-fil under din CMS/Asp/PreExecute/asp-mapp, kalla det vad du vill, något som ASPError.ASP.
- kopiera följande kod till filen:
<% ' 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 %>
Slutligen måste vi konfigurera IIS.
- i Internet Information Services (IIS) Manager, Välj mappen under ”Standardwebbplats” (eller vilken webbplats du använder för CMS WSMS) > ”CMS” > ”PreExecute” > ”asp”.
- högerklicka på mappen och välj ”Egenskaper”.
- välj fliken ”Anpassade fel”. Bläddra ner tills du hittar ”500; 100” i HTTP-felkolumnen.
- markera den och klicka på ”Redigera…”.
- ändra ”meddelandetyp:” till ”URL” och ställ in ”URL:” till ”/CMS/PreExecute/asp/ASPError.asp”
testa
för att testa det är ganska enkelt. Om du antar att din pre-execution fungerade tidigare, borde du kunna lägga till lite trasig ASP-kod i din mall (t. ex. <!IoRangePreExecute>< % = functionThatDoesNotExist() %><!/ Iorangepreexecute>) och förhandsgranska sidan. Du bör få standard (läs värdelös) CMS wsms felsida men du bör också få en loggfil som skapats i mappen CMS/Asp/PreExecute/loggar med detaljerad information om asp fel som har inträffat.
varningar
om du kör en grupperad CMS WSMS, kanske du vill vara försiktig med den här proceduren. När jag försökte ändra förinställningsinställningarna under en grupperad CMS WSMS-miljö fungerade det inte bara, det tog också ner publiceringen av alla projekt. Jag har inte undersökt detta längre i detta skede, om och när jag gör det, lägger jag upp mina resultat.
ASP.NET
metoden som beskrivs ovan fungerar bara för klassisk ASP. Det skulle vara bra om någon skulle beskriva motsvarande process för ASP.NET. några tagare?