在CentOS上运行带有Razor视图的ServiceStack

时间:2013-04-22 13:23:14

标签: razor centos servicestack mod-mono

我从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。“

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

1 个答案:

答案 0 :(得分:2)

我们使用Nginx/FastCGIMono to server mono ASP.NET sites ourselves,虽然在mod_mono配置层中使用razor文件扩展名映射来处理razor文件没有什么特别之处,但您需要做的就是确保请求进入ServiceStack ASP .NET主机。

配置它以便请求进入ServiceStack

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

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

这是ServiceStack的nginx配置,我们用它来托管razor.servicestack.net和Nginx(在Ubuntu上),它位于/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;
    }
}

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

<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

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

引擎盖下发生了什么

razor.servicestack.net的请求通过端口80 时,它将由nginx处理,它与server_name razor.servicestack.net;上的第一个nginx配置块匹配。

location / { .. }指令告诉nginx将所有后备路由转发到使用fastcgi_pass 127.0.0.1:9000;指定的端口9000 上支持的fastcgi。

请求现在由FastCGI Mono处理,它指向使用<vhost>razor.servicestack.net</vhost>标识的ASP.NET Web应用程序,作为ServiceStack处理程序mounted at the / root path,ServiceStack最终处理请求。