Моно-случайные ошибки компиляции CS0006 с fastcgi-mono-server4

Я пытаюсь развернуть проект ASP MVC, разработанный на Mono/OSX, на моем сервере Linux с использованием mono 2.10.8.1 с fastcgi-mono-server4

Веб-приложение всегда запускается нормально, но затем я начинаю получать случайные ошибки компиляции CS0006 для различных URI, и после их поломки они остаются неработоспособными, пока я не перезапущу приложение сервера.

Пример ошибки:

Server Error in '/' Application

Compilation Error

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

Compiler Error Message: CS0006: Metadata file `/tmp/root-temp-aspnet-0/ed68754/App_global.asax_40e709ea.dll' could not be found

~/Views/Order/Download.aspx

В январе есть связанная ветка, но и вопрос, и ответ кажутся специфичными для mod_mono и скорее волнистыми. Кто-нибудь есть какие-либо советы о том, что попытаться отладить / решить / обойти эту проблему? Это очень расстраивает. В частности, существует ли какой-либо "неподдерживаемый" обходной путь, при котором я могу скопировать что-нибудь со своих компьютеров с Windows Server, чтобы использовать реализацию MS вместо глючной моно?

(Я также подал отчет об ошибке.)

2 ответа

Решение

Так как ошибки, по-видимому, связаны с попыткой Mono JIT скомпилировать временные файлы, которые не существуют, я потратил несколько дней, пытаясь найти разные способы решения этой проблемы (против ее решения). Одним из решений, которое работало, было использование aspnet_compiler в Windows для создания двоичной версии, которую можно было бы копировать и запускать как есть в Linux/Mono (поскольку последние версии Mono теперь поддерживают предварительно скомпилированные приложения ASP.NET).

Однако я искал собственное решение для Linux и не хочу компилировать и синхронизировать двоичные файлы (вместо синхронизации репозитория кода GIT) с сервером, поэтому я искал другое решение, когда столкнулся с Mono. времени компиляции, которая в значительной степени эквивалентна ngen.exe в Windows.

Хотя он не прекомпилирует все, похоже, он добился цели. Для меня этот сценарий развертывания делает работу без сбоев сборки во время выполнения:

xbuild SystemDiscs.sln
mono --aot -O=all SystemDiscs/bin/SystemDiscs*.dll
killall -9 mono
nohup fastcgi-mono-server4 /socket=tcp:127.0.0.1:8000 /applications=/:/var/asp/S
ystemDiscs/SystemDiscs/ > /var/log/systemdiscs.log &

куда SystemDiscs*.dll вывод решения, скомпилированного с xbuild на первом этапе. Я не думаю, что это прекомпилирует страницы ASP (и - xot, насколько я могу судить, не поддерживается на x86), но каким-то образом это сработало. Я ждал, чтобы увидеть, было ли это просто случайностью или нет, но все прошло нормально, возможно, с дюжиной коммитов / развертываний, с тех пор как я спросил об этом десять дней назад, поэтому я считаю, что можно сказать, что это работает.

У меня была похожая проблема:

Compilation Error

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

Compiler Error Message: CS0006: Metadata file `/tmp/<DOMAIN/>/<username/>-temp-aspnet-0/5ed74d00/App_global.asax_34cccb99.dll' could not be found
/Default.aspx

Но это не имело ничего общего с прекомпиляцией, а с обратной косой чертой в моем имени пользователя. Я использую likewise-open для входа в домен Windows, поэтому мое имя пользователя \, а мой домашний каталог не имеет обратной косой черты: / home / likewise-open //. Это различие или просто обратная косая черта привели к тому, что mono не нашел скомпилированный файл global.asax во временном каталоге. Если вы внимательно посмотрите на подробный вывод, вы увидите, что обратная косая черта \ в параметре out изменяется на прямую косую черту /:

dmcs /target:library /lib:"/home/likewise-open/<DOMAIN/>/<username/>/Documents/test9999/test9999/bin" /debug+ /optimize- /warn:4 /out:"/tmp/<DOMAIN/>\<username/>-temp-aspnet-0/5ed74d00/App_Web_17ca7bdd.dll" /r:"/usr/lib/mono/4.0/mscorlib.dll" /r:"/usr/lib/mono/gac/Microsoft.CSharp/4.0.0.0__b03f5f7f11d50a3a/Microsoft.CSharp.dll" /r:"/usr/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll" /r:"/usr/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll" /r:"/usr/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll" /r:"/usr/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll" /r:"/usr/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll" /r:"/usr/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll" /r:"/usr/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll" /r:"/usr/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll" /r:"/usr/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll" /r:"/usr/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll" /r:"/usr/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll" /r:"/usr/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll" /r:"/usr/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll" /r:"/usr/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll" /r:"/usr/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll" /r:"/usr/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll" /r:"/usr/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll" /r:"/usr/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll" /r:"/usr/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll" /r:"/usr/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll" /r:"/usr/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll" /r:"/home/likewise-open/<DOMAIN/>/<username/>/Documents/test9999/test9999/bin/test9999.dll" /r:"/tmp/<domain/>/<username/>-temp-aspnet-0/5ed74d00/App_global.asax_34cccb99.dll"  /nowarn:0169 /d:DEBUG  -- "/tmp/<DOMAIN/>\<username/>-temp-aspnet-0/5ed74d00/App_Web_17ca7bdd_0.cs" 

Так:

/out:"/tmp/<DOMAIN/>\<username/>-temp-aspnet-0/5ed74d00/App_Web_17ca7bdd.dll 

становится

/tmp/<DOMAIN/>/<username/>-temp-aspnet-0/5ed74d00/App_global.asax_34cccb99.dll

Если я скопирую каталог 5ed74d00 в / tmp //- temp-aspnet-0 /, приложение будет работать должным образом.

Мне понадобилось почти 2 дня, чтобы увидеть это, так что, надеюсь, я смогу помочь другим с этим ответом.

Другие вопросы по тегам