rdb: Depuración Preejecutada (clásica) ASP-Grupo de Usuarios de Soluciones Web de Texto abierto e. V.

  • Blog de CMS de RedDot
  • 15.11.2019
  • ES

rdb: Depurar ASP Pre-Ejecutado (clásico)

El problema

Estoy seguro de que casi todos los desarrolladores de Servidores de Administración de Soluciones Web de Reddot CMS se habrían topado con algún ASP pre-ejecutado en sus plantillas que ha fallado. La frustración resultante de no tener un método incorporado de depuración o incluso simplemente obtener algún tipo de mensaje de error significativo del CMS WSMS es una de las molestias más discutidas del producto. Claro, está el plug-in del Depurador Preejecutable, pero para usarlo, se deben hacer cambios en el servidor RD.archivo ini. Esos cambios pueden inutilizar un proyecto o incluso bloquear el Servidor de Administración de Soluciones Web CMS de RedDot server err server server (he experimentado ambos escenarios varias veces). Esto último, por supuesto, se puede arreglar mediante un reinicio, pero si se trata de un sistema de producción ocupado, eso no es práctico.

Seguramente, debe haber alguna forma de sacar esos errores del sistema y devolverlos al desarrollador.

La solución

No se si soy la primera persona en pensar en esto, pero no lo he visto discutido antes, así que espero que sea información útil.

Un poco de fondo

El ASP preejecutado es renderizado por CMS WSMS antes de pasar a IIS para que se ejecute. El código resultante se devuelve a CMS WSMS para su inclusión en la página. Aunque no lo vea, si el ASP falla, IIS genera un error 500. Desafortunadamente, esta información sobre el error 500 se pierde a medida que los datos se pasan entre CMS WSMS e IIS y viceversa.

Introduzca la página de error personalizada

En IIS, es posible establecer una página de error personalizada para cada tipo de error que se produzca en el servidor web. Esto se utiliza tradicionalmente para proporcionar a los usuarios finales una página 404 significativa en los sitios web publicados. Podemos aprovechar esta funcionalidad para establecer una página de error personalizada para un error 500 en el servidor CMS WSMS. Además de esto, la gente de Microsoft se ha despejado para proporcionar un objeto de error que solo está disponible a partir de un error 500 y devuelve un montón de información útil sobre el error. Por lo tanto, podemos capturar la información de error y registrarla en un archivo.

El Proceso

Lo primero que tenemos que hacer es crear algunas carpetas.

  1. En su carpeta CMS WSMS (CMS/ASP), cree una carpeta llamada «PreExecute».
  2. En la nueva carpeta, cree dos más llamados «registros»y » asp». La cuenta IUSR de la máquina debe tener acceso de escritura a ambas carpetas.

A continuación tenemos que establecer la configuración RDExecute y PreExecute.

  1. En su proyecto, en «Administrar configuración del proyecto» > «Proyecto» > «Configuración general», seleccione «Editar configuración» en el Menú Acción.
  2. En «Ajustes RDExecute y PreExecute», establezca la «Ruta física» en «C:\Program Files\RedDot\CMS\ASP\PreExecute\asp» (o la ruta a su carpeta si su instalación es diferente) y el «Directorio virtual (IIS)» a » / CMS / PreExecute / asp/»

En este punto, compruebe que su preejecución sigue funcionando en su proyecto.

Ahora para crear el manejador de errores personalizado.

  1. Cree un archivo ASP en su carpeta CMS / ASP / PreExecute / asp, llámelo como quiera, algo como ASPError.áspid.
  2. Copie el siguiente código en el archivo:
    <% ' 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 %>

Por último, necesitamos configurar IIS.

  1. En el Administrador de Servicios de Información de Internet (IIS), seleccione la carpeta en «Sitio web predeterminado» (o el sitio que esté utilizando para CMS WSMS) > «CMS» > «PreExecute» > «asp».
  2. Haga clic con el botón derecho en la carpeta y seleccione «Propiedades».
  3. Seleccione la pestaña «Errores personalizados». Desplácese hacia abajo hasta encontrar «500; 100» en la columna de error HTTP.
  4. Resalte y haga clic en «Editar Edit».
  5. Cambie el » Tipo de mensaje: «por» URL «y establezca el» URL: «en» /CMS/PreExecute/asp/ASPError.asp»

Probar

Para probarlo es bastante simple. Suponiendo que su preejecución estuviera funcionando antes, debería poder agregar un código ASP roto a su plantilla (por ejemplo, <!IoRangePreExecute> < % = Función que no existe() %><!/IoRangePreExecute>) y previsualizar la página. Debe obtener la página de error estándar (lectura inútil) de CMS WSMS, pero también debe obtener un archivo de registro creado en su carpeta CMS/ASP/PreExecute/logs con información detallada sobre el error ASP que se ha producido.

Advertencias

Si está ejecutando un CMS WSMS en clúster, es posible que desee tener cuidado con este procedimiento. Cuando intenté cambiar la configuración previa a la ejecución en un entorno WSMS de CMS en clúster, no solo no funcionó, sino que también eliminó la publicación de TODOS los proyectos. No he investigado esto más a fondo en esta etapa, si y cuando lo haga, publicaré mis hallazgos.

ASP.NET

El método descrito anteriormente solo funciona para ASP clásico. Sería genial si alguien describiera el proceso equivalente para ASP.NET¿ Alguien quiere?

Write a Comment

Tu dirección de correo electrónico no será publicada.