Fastcgi-mono-server4调试在nginx上,是可能的



关于如何为本地开发目的设置使用xsp服务器的调试,有很多可用的信息,只是来自官方mono网站的一个例子:

我希望在堆栈跟踪中显示行号

默认情况下,xsp和xsp2以"release"模式运行,这意味着没有调试信息在运行时生成。如果你想要直线在堆栈跟踪中的数字,必须将——debug选项传递给这是通过使用MONO_OPTIONS调用xsp或xsp2来完成的环境变量,像这样:

$ MONO_OPTIONS=--debug xsp
Listening on port: 8080 (non-secure)
Listening on address: 0.0.0.0
Root directory: /tmp/us
Hit Return to stop the server.

如果你在Apache上运行mod_mono,你必须使用MonoDebug指令,如下所示:

MonoDebug true

在nginx上可行吗?

我自己刚刚遇到了同样的问题,并能够修复它:)

MONO_OPTIONS环境变量可以保存传递给mono可执行文件的附加参数。如果你这样做了:

export MONO_OPTIONS="--debug"
fastcgi-mono-server-4 /applications="/:/srv/www/htdocs/mywebapp" /socket=tcp:127.0.0.1:9000

您应该在出现错误时获得调试信息(linenumber和files),当然前提是您还部署了*。保存调试信息的MDB文件。

我个人使用在这里找到的初始化脚本的修改版本,如下:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          monoserve.sh
# Required-Start:    $local_fs $syslog $remote_fs
# Required-Stop:     $local_fs $syslog $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start fastcgi mono server with hosts
### END INIT INFO
source /etc/mono-addon-env
NAME=monoserver
DESC=monoserver
MONO_OPTIONS="--debug"
MONOSERVER=$(which fastcgi-mono-server4)
MONOSERVER_PID=$(ps auxf | grep fastcgi-mono-server4.exe | grep -v grep | awk '{print $2}')
WEBAPPS="/:/srv/www/htdocs/mywebapp/"
case "$1" in
        start)
                if [ -z "${MONOSERVER_PID}" ]; then
                        echo "starting mono server"
                        ${MONOSERVER} /applications=${WEBAPPS} /socket=tcp:127.0.0.1:9000 &
                        echo "mono server started"
                else
                        echo ${WEBAPPS}
                        echo "mono server is running"
                fi
        ;;
        stop)
                if [ -n "${MONOSERVER_PID}" ]; then
                        kill ${MONOSERVER_PID}
                        echo "mono server stopped"
                else
                        echo "mono server is not running"
                fi
        ;;
esac
exit 0

但是注意:如果你使用初始化脚本启动fastcgi守护进程,不要使用任何初始化工具,如"service monoserve start"(RHEL/CentOS)或"rcMonoserve start"。对我来说,这行不通,我怀疑init系统会生成另一个具有不同环境变量的进程。为安全起见,只直接调用脚本,即:/etc/init.d/monoserve开始然后放到/etc/rc本地或其他。

最新更新