簡體   English   中英

如何在Azure WebRole上正確設置ImageResizer的緩存目錄?

[英]How can I properly set the cache directory for ImageResizer on an Azure WebRole?

ImageResizer的DiskCache插件在本地工作正常,但是當我將WebRole部署到Azure時,部署分區太小而無法緩存大量文件。

具體來說,WebRole分區在一個小角色上約為1GB。 我想將緩存目錄指向:

  1. “C:”驅動器(小角色大約200 + GB)。
  2. 附加驅動器(我指定的任何大小)。

問題是WebRole所需的寫權限。 是否有臨時目錄的簡單解決方法,或者我是否需要PowerShell腳本來配置虛擬目錄上的ACL並將其附加到WebRole的站點?

在我走這條路之前,我想知道是否有人有合理的解決方法。

在ServiceDefinition.csdef中:

<Task commandLine="makevdir.cmd" executionContext="elevated" taskType="background" />

Makevdir.cmd:

PowerShell -ExecutionPolicy Unrestricted .\makevdir.ps1 >> "%RoleRoot%\makevdir.txt" 2>&1
EXIT /B %errorlevel%

Makevdir.ps1:

# Make Virtual Directory for ImageResizer DiskCache plugin (/imagecache) 
Write-Host "makevdir.ps1 starting"

# $ImageCacheDir = $env:temp + "\imagecache"
#
# The TEMP paths are quota limited to ~100MB, so use a hard coded path:
$ImageCacheDir = "C:\Resources\AspNetTemp\imagecache"

Write-Host "ImageCacheDir = $ImageCacheDir"
md -Path $ImageCacheDir

# Set the ACL to allow IIS access to the new directory
$acl = Get-Acl $ImageCacheDir
$identity = "IIS_IUSRS"
$fileSystemRights = "Modify"
$inheritanceFlags = "ContainerInherit, ObjectInherit"
$propagationFlags = "None"
$accessControlType = "Allow"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($identity,          $fileSystemRights, $inheritanceFlags, $propagationFlags, $accessControlType)
$acl.SetAccessRule($rule)
Set-Acl $ImageCacheDir $acl

# Get the AppName by appending _Web/ to the RoleInstanceID environmental variable
$AppName = $env:RoleInstanceID + "_Web/"
Write-Host "AppName = $AppName"

# Retry creating the virtual directory every five seconds for a maximum of 20 tries
$tries = 0
& $Env:WinDir\system32\inetsrv\appcmd.exe add vdir /app.name:$AppName /path:/imagecache /physicalpath:$ImageCacheDir
while (!$? -and $tries -lt 20) {
$tries++
    sleep 5
& $Env:WinDir\system32\inetsrv\appcmd.exe add vdir /app.name:$AppName /path:/imagecache /physicalpath:$ImageCacheDir
}

Write-Host "makevdir.ps1 exiting"
Exit

由於DiskCache將文件服務委托給IIS以提高性能,因此您需要一個IIS虛擬文件夾。

DiskCache可以從任何虛擬文件夾緩存/提供文件,無論其物理位置如何(盡管本地存儲最佳 - 延遲是不可接受的)。

臨時文件夾不起作用,因為IIS和ASP.NET運行時用戶帳戶都需要讀/寫訪問權限,並且您肯定希望DiskCache是​​持久的。

聽起來你需要為此設置腳本。 我想很多人都可以從這樣的腳本中受益,如果你可以在完成后分享它。 以下是如何編寫IIS虛擬文件夾的腳本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM