Моно 2.11 на nginx, использующем fastcgi-mono-server4, не будут работать

Какую систему Вы выполняете? Какую ошибку Вы имеете?

проверьте официальную документацию: http://svnbook.red-bean.com/en/1.1/ch05s03.html

5
задан 18 June 2012 в 21:01
1 ответ

Мой пример приложения MVC3 отлично работает на Mono 2.10.8.1 с сайта badgerports.org (я использую ubuntu).

После установки Mono 2.11.2 из исходного кода одно и то же приложение всегда будет возвращать сообщение 502 Bad Gateway, как и в вашем случае.

Мои журналы nginx выглядели следующим образом:

[error] 3384#0: *101 upstream sent unexpected FastCGI record: 3 while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost:8000"

После вызова fastcgi-mono-server4 с параметром printlog, установленным в значение true

sudo /opt/mono-2.11.2/bin/fastcgi-mono-server4 /printlog=True /applications=/:/var/www/mono/Mvc3Template /socket=tcp:127.0.0.1:9000

Он генерировал эту трассировку стека после посещения localhost: 8000 /

[2012-07-27 14:55:57Z] Notice  Beginning to receive records on connection.
[2012-07-27 14:55:58Z] Error   ERROR PROCESSING REQUEST: System.TypeInitializationException: An exception was thrown by the type initializer for Mono.WebServer.FastCgi.WorkerRequest

Server stack trace: 
  at Mono.WebServer.FastCgi.ApplicationHost.ProcessRequest (Mono.WebServer.FastCgi.Responder responder) [0x00001] in /home/r522/Desktop/mono-2.11.2/build/xsp-2.10.2/src/Mono.WebServer.FastCgi/ApplicationHost.cs:47 
  at (wrapper remoting-invoke-with-check) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (Mono.WebServer.FastCgi.Responder)
  at (wrapper xdomain-dispatch) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (object,byte[]&,byte[]&)

Exception rethrown at [0]: 
 ---> System.InvalidCastException: Cannot cast from source type to destination type.
  at System.Configuration.ConfigurationManager.get_AppSettings () [0x00000] in <filename unknown>:0 
  at Mono.WebServer.FastCgi.WorkerRequest..cctor () [0x0002c] in /home/r522/Desktop/mono-2.11.2/build/xsp-2.10.2/src/Mono.WebServer.FastCgi/WorkerRequest.cs:50 
  --- End of inner exception stack trace ---
  at (wrapper xdomain-invoke) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (Mono.WebServer.FastCgi.Responder)
  at (wrapper remoting-invoke-with-check) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (Mono.WebServer.FastCgi.Responder)
  at Mono.WebServer.FastCgi.Responder.Process () [0x00060] in /home/r522/Desktop/mono-2.11.2/build/xsp-2.10.2/src/Mono.WebServer.FastCgi/Responder.cs:90 
[2012-07-27 14:55:58Z] Notice  Finished receiving records on connection

Вот некоторые из моих настроек:

#/etc/nginx/sites-enabled/mono

 server {
         listen   8000;
         server_name  localhost;
         access_log   /var/log/nginx/mono.access.log;
         error_log    /var/log/nginx/mono.error.log;
         location / {
                 root /var/www/mono/Mvc3Template;
                 index index.html index.htm default.aspx Default.aspx;
                 fastcgi_index /Home/Index; # Points to HomeController Index Action
                 fastcgi_pass 127.0.0.1:9000;
                 include /etc/nginx/fastcgi_params;
         }
 }

-

# Directory structure
/var/www/mono
├── Mvc3Template
│   ├── bin
│   ├── Content
│   ├── Controllers
|   ... omitted rest
├── Mvc3Template.sln
├── Mvc3Template.suo
├── Mvc3Template.userprefs
├── packages

-

Я нашел решение своей проблемы здесь: bugzilla.xamarin.com/show_bug.cgi?id=2876 (Что меня беспокоит, так это то, что он предположительно был исправлен в феврале 2012 года - скомпилированный мной моно был выпущен в июне afaik, но он не работал из коробки)

Я создал сценарий, основанный на найденных там предложениях, который исправляет ошибку моно установка, просто укажите переменную PREFIX в вашем монокаталоге и запустите ее:

#!/bin/bash

# Your mono directory
PREFIX=/opt/mono-2.11.2


FILES=('mod-mono-server4'
       'fastcgi-mono-server4'
       'xsp4')

cd $PREFIX/lib/mono/4.0

for file in "${FILES[@]}"
do
   cp "$file.exe" ../4.5
done


cd $PREFIX/bin

for file in "${FILES[@]}"
do
  sed -ie 's|mono/4.0|mono/4.5|g' $file
done

После этого приложение "работает", но еще не совсем там. Это больше не 502, и у меня есть отличная трассировка стека ...

System.Web.Compilation.CompilationException
: at IKVM.Reflection.Reader.ModuleReader.ResolveType (Int32 metadataToken, IGenericContext context) [0x00000] in <filename unknown>:0

Description: Error compiling a resource required to service this request. Review your source file and modify it to fix this error.

Details: : at IKVM.Reflection.Reader.ModuleReader.ResolveType (Int32 metadataToken, IGenericContext context) [0x00000] in <filename unknown>:0

Error origin: Compiler

Error source file: ~/Global.asax
Exception stack trace:

Так что мне еще есть кое-что, что нужно выяснить самому, но я надеюсь, что что-то из этого будет полезно для вас.

7
ответ дан 3 December 2019 в 01:26

Теги

Похожие вопросы