2014-09-09 4 views
1

Azure 환경에 sitecore 응용 프로그램을 배포하는 데 문제가 있습니다. 클라우드 서비스를 업데이트 한 후에는 시작할 수 없으며 정보를 제공합니다 : Unhandled Exception: Microsoft.ApplicationServer.Caching.DataCacheException.Sitecore azure을 시작할 수 없습니다.

0 : [00003180:00000006, 2014/09/09 06:35:16.89, ERROR] Unhandled exception: IsTerminating 'True', Message 'System.TimeoutException: We waited for 'Boolean <CreateSymbolicLink>b__1()' that didn't finish within 00:00:30. 
    at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) 
    at System.Environment.get_StackTrace() 
    at Sitecore.Azure.Sys.Retryer.Do.Until(Func`1 predicate, TimeSpan timeout) 
    at RoleRootConfigurator.CreateSymbolicLink(String relativePathToAppRoot, DirectoryInfo localResourceDir) 
    at WebRole.RoleRootConfigurator.ConfigureSymbolicLinksForApproot(DirectoryInfo localResourceDir) 
    at WebRole.OnStart() 
    at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum) 
    at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.<InitializeRole>b__0() 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
    at Sitecore.Azure.Sys.Retryer.Do.Until(Func`1 predicate, TimeSpan timeout) 
    at WebRole.RoleRootConfigurator.CreateSymbolicLink(String relativePathToAppRoot, DirectoryInfo localResourceDir) 
    at WebRole.RoleRootConfigurator.ConfigureSymbolicLinksForApproot(DirectoryInfo localResourceDir) 
    at WebRole.OnStart() 
    at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum) 
    at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.<InitializeRole>b__0() 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart()' 

우리는 Sitecore 개발자에 의해 준비 코드를 기반으로 우리의 사용자 정의 WebRole을 만들었습니다 WaIISHost 프로세스 로그에서 나는 이러한 오류를 찾는거야. 여기에 기호 링크를 레이팅에 대한 책임 코드를 제시 : 이벤트 뷰어에서

public void ConfigureSymbolicLinksForApproot(DirectoryInfo localResourceDir) 
{ 
    if (RoleEnvironment.IsEmulated) 
     return; 
    Trace.TraceInformation(" -- Configure app root starting..."); 
    this.CreateSymbolicLink("temp", localResourceDir); 
    this.CreateSymbolicLink("App_Data/debug", localResourceDir); 
    this.CreateSymbolicLink("App_Data/diagnostics", localResourceDir); 
    this.CreateSymbolicLink("App_Data/indexes", localResourceDir); 
    this.CreateSymbolicLink("App_Data/logs", localResourceDir); 
    this.CreateSymbolicLink("App_Data/packages", localResourceDir); 
    this.CreateSymbolicLink("App_Data/viewstate", localResourceDir); 
    this.CreateSymbolicLink("App_Data/MediaCache", localResourceDir); 
    this.CreateSymbolicLink("App_Data/Submit_Queue", localResourceDir); 
} 

private void CreateSymbolicLink(string relativePathToAppRoot, DirectoryInfo localResourceDir) 
{ 
    DirectoryInfo appRootDir = new DirectoryInfo(Path.Combine(this.AppRoot.FullName, relativePathToAppRoot)); 
    Do.ThisOnce((Action)(() => RmDir.RemoveDir(appRootDir))).Until((Func<bool>)(() => !Directory.Exists(appRootDir.FullName))); 
    DirectoryInfo tempLocalResourceDir = new DirectoryInfo(Path.Combine(localResourceDir.FullName, relativePathToAppRoot)); 
    Do.ThisOnce(new Action(tempLocalResourceDir.CreateIfNotExists)).Until((Func<bool>)(() => Directory.Exists(tempLocalResourceDir.FullName))); 
    Do.ThisOnce((Action)(() => MkLink.CreateLink(appRootDir, tempLocalResourceDir))).WithTracePing("Waiting for '{0}' to be created as symbolic link in app root", (object)appRootDir.FullName).Until((Func<bool>)(() => Directory.Exists(appRootDir.FullName))); 
} 

나는 또한 발견했습니다 같은 정보 :

Faulting application name: CacheService.exe, version: 1.0.5137.0, time stamp: 0x52304f01 
Faulting module name: KERNELBASE.dll, version: 6.2.9200.16864, time stamp: 0x531d34d8 
Exception code: 0xe0434352 
Fault offset: 0x0000000000047b8c 
Faulting process id: 0x1e80 
Faulting application start time: 0x01cfcc0ca7dac7a3 
Faulting application path: F:\plugins\Caching\CacheService.exe 
Faulting module path: D:\Windows\system32\KERNELBASE.dll 
Report Id: ee6a3966-37ff-11e4-93f6-00155d67d4ca 
Faulting package full name: 
Faulting package-relative application ID: 

Application: CacheService.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: Microsoft.ApplicationServer.Caching.DataCacheException 
Stack: 
    at Microsoft.ApplicationServer.Caching.AzureCommon.AzureUtility.ProcessException(System.Exception) 
    at Microsoft.ApplicationServer.Caching.Colocatedservice.CacheService.<OnStart>b__0(System.Object) 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() 

이를 바탕으로 내가 시도했다 Sitecore 또는 Azure SDK 2.2 폴더에있는 Nuget을 사용하여 Windows AzureCache 라이브러리를 업데이트하지만 아무 것도 변경되지 않았습니다. 어떤 도움도 감사 할 것입니다.

답변

2

Jacbar.

  • \ App_Data \ 진단
  • \ App_Data \

    • \ 임시
    • App_Data \ 디버그 \ : 초기 예외를 바탕으로

      는 배포 프로세스는 다음 디렉토리에 대한 Windows Symbolic Links를 만드는 동안 실패 색인
    • \ App_Data \ logs
    • \ App_Data \ packages
    • .5 GB의 제한된 크기를 (이 가상 머신에 : App_Data \의 viewstate가 App_Data \ MediaCache

    Sitecore 푸른 \

  • \
  • 는 마지막 디스크 (/ 보통 디스크 F)의 오버 플로우를 방지하기 위해이 트릭을 사용하여 1GB였습니다). 이 디스크는 PaaS에 배포하는 ASP.NET 웹 응용 프로그램을 유지하는 데 사용됩니다. .NET Reflector로서

    날에 도시 한 바와 같이, Sitecore.Azure.Sys.Retryer.Do.Until (Func을 술어) 방법은 30 초에 해당 하드 제한 시간을 사용한다. 귀하의 경우 F : \ approot (aka Website) 폴더 아래의 이전 디렉토리를 제거하는 데 30 초가 걸리지 않는 것처럼 보입니다. Azure 로컬 스토리지 자원에 새 디렉토리를 만들고 심볼 링크를 사용하여 링크하십시오.

    30 초 하드 코딩 된 값을 처리하는 가장 좋은 방법을 찾으려면 Sitecore Support으로 지원 티켓을 여는 것이 좋습니다.

    최고 희망, Oleg

  • +0

    하늘빛 인스턴스를 중지하는 것은 도움이되었습니다. :) – jacbar