我从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。“
这可能是一个简单的解决方案。我花了几个小时谷歌搜索没有解决方案的答案。
答案 0 :(得分:2)
我们使用Nginx/FastCGIMono to server mono ASP.NET sites ourselves,虽然在mod_mono配置层中使用razor文件扩展名映射来处理razor文件没有什么特别之处,但您需要做的就是确保请求进入ServiceStack ASP .NET主机。
目标应该只是确保请求通过ServiceStack进行处理(ServiceStack将在其到达后处理其余部分),因此您应该通过指定可能阻止它的任何中间件层配置来避免阻碍它。 / p>
这是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最终处理请求。