2

我从https://github.com/ServiceStack/RazorRockstars.git克隆了 RazorRockstars 项目,并验证它在 Windows 上运行。现在我想用 Mono 2.10.8 将它部署到 Linux CentOS 6.3。我遵循了本教程: http: //pastebin.com/TBf3NWTw

问题是我无法获得运行 Razor 视图的解决方案。

我的 mod_mono.conf 文件如下所示:

<IfModule !mod_mono.c>
  LoadModule mono_module /usr/lib/httpd/modules/mod_mono.so
</IfModule>

<IfModule mod_headers.c>
   Header set X-Powered-By "Mono"
</IfModule>

AddType application/x-asp-net .aspx
AddType application/x-asp-net .cshtml
AddType application/x-asp-net .asmx
AddType application/x-asp-net .ashx
AddType application/x-asp-net .asax
AddType application/x-asp-net .ascx
AddType application/x-asp-net .soap
AddType application/x-asp-net .rem
AddType application/x-asp-net .axd
AddType application/x-asp-net .cs
AddType application/x-asp-net .vb
AddType application/x-asp-net .master
AddType application/x-asp-net .sitemap
AddType application/x-asp-net .resources
AddType application/x-asp-net .skin  
AddType application/x-asp-net .browser
AddType application/x-asp-net .webinfo
AddType application/x-asp-net .resx
AddType application/x-asp-net .licx
AddType application/x-asp-net .csproj
AddType application/x-asp-net .vbproj
AddType application/x-asp-net .config
AddType application/x-asp-net .Config
AddType application/x-asp-net .dll
DirectoryIndex index.aspx
DirectoryIndex Default.aspx
DirectoryIndex default.cshtml
DirectoryIndex default.aspx
MonoServerPath "/opt/mono/bin/mod-mono-server4"

如果我将 Default.aspx 文件添加到 /var/www/RazorRockstars 文件夹,我可以在我的屏幕上查看主页,但如果我单击一个链接 (Henrix),我最终会收到一条错误消息消息,告诉我“请求的 URL在此服务器上找不到 /stars/dead/hendrix。”

这可能是一个简单的解决方案。我花了几个小时在谷歌上搜索没有解决方案的答案。

4

1 回答 1

2

我们使用Nginx/FastCGIMono 自己为单声道 ASP.NET 站点提供服务,尽管在 mod_mono 配置层中处理 razor 文件扩展名映射并没有什么特别需要做的事情,您需要做的就是确保请求通过ServiceStack ASP.NET 主机。

配置它,以便请求通过 ServiceStack

目标应该只是确保请求通过 ServiceStack 进行处理(ServiceStack 将在到达后处理其余的请求),因此您应该通过指定任何可能阻止它的中间件层配置来避免阻碍它。

razor.servicestack.net 的 ServiceStack 的 Nginx + FastCGI Mono 配置

这是 ServiceStack 的 nginx conf,我们使用 Nginx(在 Ubuntu 上)托管razor.servicestack.net,它位于单独的配置文件中/etc/nginx/sites-available/servicestack.net

server {
    listen 0.0.0.0:80;
    server_name razor.servicestack.net;
    access_log /var/log/nginx/servicestack.net.log;

    root /home/mythz/src/RazorRockstars/src/RazorRockstars.WebHost;

    #get nginx to handle static files for better performance
    location /img/ {
       alias /home/mythz/src/RazorRockstars/src/RazorRockstars.WebHost/img/;
    }    
    location ~* \.(ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
       add_header        Cache-Control public;
       add_header        Cache-Control must-revalidate;
       expires           1d;
    } 

    #proxy all requests to monofastcgi backend + specify supported default documents
    location / {
        index index.html index.htm index.aspx default.htm Default.htm default.aspx Default.aspx Default.ashx default.cshtml;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

这是我们用来指定我们保留的所有 ASP.NET Web 应用程序的 Mono FastCGI 配置文件/etc/init.d/mono-fastcgi/ServiceStack.webapp

<apps>
<web-application>
        <name>RazorRockstars</name>
        <vhost>razor.servicestack.net</vhost>
        <vport>80</vport>
        <vpath>/</vpath>
        <path>/home/mythz/src/RazorRockstars/src/RazorRockstars.WebHost</path>
</web-application>
...
<apps>

最后,这是我们运行的 fastcgi 命令,它是ServiceStack.webapp上面指定的托管所有 Mono ASP.NET 站点的进程:

/usr/bin/fastcgi-mono-server4 --appconfigdir /etc/init.d/mono-fastcgi \
/socket=tcp:127.0.0.1:9000 /logfile=/var/log/mono/fastcgi.log

该指令表示托管目录中任何FastCGI Mono 配置文件中--appconfigdir /etc/init.d/mono-fastcgi包含的所有 ASP.NET Web 应用程序。*.webapp/etc/init.d/mono-fastcgi

引擎盖下发生了什么

当一个请求razor.servicestack.net通过端口 80时,它由 nginx 处理,这与server_name razor.servicestack.net;.

该指令告诉nginxlocation / { .. }将所有后备路由转发到由.fastcgi_pass 127.0.0.1:9000;

该请求现在由 FastCGI Mono 处理,它定向到标识为 ASP.NET Web 应用程序<vhost>razor.servicestack.net</vhost>,因为 ServiceStack 处理程序安装在 / 根路径,ServiceStack 最终处理请求。

于 2013-04-22T16:28:42.780 回答