我想部署托管在Azure Web App中的Django网站。
静态文件可以在DEBUG模式下完美地服务(DEBUG = False),但是我找不到正确的设置来让服务器在生产中处理它。 我所有的静态文件都收集在应用程序根目录wwwroot / static /的“ static”目录中。
这是web.config ,位于应用程序的根目录。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="WSGI_ALT_VIRTUALENV_HANDLER" value="MyApp.wsgi.application" />
<add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="D:\home\site\wwwroot\env\Scripts\python.exe" />
<add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_venv_handler()" />
<add key="PYTHONPATH" value="D:\home\site\wwwroot" />
<add key="DJANGO_SETTINGS_MODULE" value="MyApp.settings" />
<add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgit.log"/>
</appSettings>
<system.webServer>
<handlers>
<add name="PythonHandler" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python34\python.exe|D:\Python34\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
</handlers>
<rewrite>
<rules>
<rule name="Static Files" stopProcessing="true">
<conditions>
<add input="true" pattern="false" />
</conditions>
</rule>
<rule name="Configure Python" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
我还在静态目录中添加了以下web.config :
<?xml version="1.0"?>
<configuration>
<system.webServer>
<!-- this configuration overrides the FastCGI handler to let IIS serve the static files -->
<handlers>
<clear />
<add
name="StaticFile"
path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"
resourceType="Either"
requireAccess="Read" />
</handlers>
</system.webServer>
我还在Web应用程序设置中将静态目录定义为“虚拟目录”,其中“ \\ static”引用“ \\ site \\ wwwroot \\ static”,并选中“ application”复选框(我也尝试不选中它,但它不会改变任何东西。
但是,这不起作用。
1)是否可以设置Azure Web应用程序以在不使用CDN的情况下在生产中提供静态文件?
2)如果是,该怎么办?
联系Azure支持后,我能够解决问题。 这实际上不是一个小问题,其他人可能已经遇到过。 以下解决方案还可以显着提高应用程序的性能。
根据Microsoft Azure支持团队的说法:
这是我遵循的解决问题的过程:
如同一教程中所述,在您的静态目录中添加一个新的web.config文件。
使用调试控制台和您的“ requirements.txt”文件安装Python软件包,并运行:
D:\\ home \\ python353x86 \\ python.exe -m pip安装-r requirements.txt
用您的实际路径替换python路径。 python软件包现已与您的Python exe一起安装。 如果必须重新启动应用程序,则使用虚拟环境会减慢网页的加载速度。
此时,您的网络应用应该可以正常运行
如果您使用的是webjob,则需要更新其运行方式。 解决方案是在您的webjob目录中创建一个“ run.cmd”文件,其中包含:
D:\home\python353x86\python.exe start.py
其中start.py是您的webjob脚本。 再一次,将python路径替换为您的实际路径。
我通过在根web.config文件的<handlers>
部分顶部添加以下两行来解决此问题:
<remove name="Python27_via_FastCGI" />
<remove name="Python34_via_FastCGI" />
其他所有内容都与您的web.config相同,并且在static/
目录中不需要单独的配置文件
将静态内容移动到Azure Blob存储并使用CDN以获得更好的性能是一个好主意。
1-)您可以像以下定义您的web.config: https : //github.com/prashanthmadi/azure-django-customdeployment/blob/master/web.config
2-)配置静态文件处理程序,添加以下内容: https : //stackoverflow.com/a/2066040/1384539