Моно-случайные ошибки компиляции 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, поэтому мое имя пользователя
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 /
Мне понадобилось почти 2 дня, чтобы увидеть это, так что, надеюсь, я смогу помочь другим с этим ответом.