从 Django/python 网络应用程序创建 Azure 网络作业

Create Azure webjobs from Django/python web app

我在 Azure Web 应用程序上部署了一个 Django 应用程序,我想动态创建网络作业。更准确地说,当我保存一个名为 Importer 的 Django 模型时,我希望能够创建一个由 3 个文件组成的新 Web 作业:

"settings.job" & "config.ini" 的内容来自管理表单,特定于 webjob。

当我保存模型时,代码会在

中创建一个新目录

App_Data\jobs\triggered{my job name}

,然后从我的应用程序目录中复制 "run.py"。

这行得通。但是,当我尝试在作业目录中创建一个名为 "settings.job" 的新文本文件并在其中写入 cron 计划时,出现服务器错误。

我尝试了很多东西,但以下基本测试导致失败:

file = open('test.txt','w')
file.write('this is a test')
file.close()

我似乎没有权限将文件写入磁盘。怎么解决呢? 另外,我希望在更新相应的 Django 模型时能够修改 config 和 settings.job 文件的内容。

此外,我尝试将另一个名为 "run2.py" 的文件复制到 webjob 目录,但也失败了!我无法在该目录

中复制 run.py 的另一个文件

根据您的描述,根据我的经验,我认为问题是由于您在代码中使用了相对路径引起的。

在Azure WebApps上,我们有权限在D:/home路径下进行任何操作。

我的建议是用绝对路径代替相对路径,比如用D:/home/site/wwwroot/App_Data/jobs/triggered/<triggered-job-name>/test.txt/home/site/wwwroot/App_Data/jobs/triggered/<triggered-job-name>/test.txt代替test.txt。请确保目录和 parent 目录已通过使用 os.path.exists(path) 检查路径是否存在并在写入文件之前使用 os.makedirs 创建它们。

同时,您也可以尝试使用WebJobs API进行一些操作,例如通过上传zip文件或更新settings.job来创建webjob。要使用这些 WebJobs API,请确保您已如下图在 Azure 门户上配置 Deployment credentials,并在请求 header.

中添加基本身份验证 Authorization: Basic <BASE64-Encode("deployment-username":"password")>

这是我的分析:

  • 将"run.py"以外的文件复制到webjob目录没有问题
  • 在(成功)将文件 "run.py" 从我的 Django 应用程序目录复制到 webjob 目录后,代码崩溃。无论我使用 shutil.copy/shutil.copyfile 还是简单地打开(“{path}/run.py”,"w")都没有关系,当我尝试编写一个名为"run.py" 到 webjob 目录中的磁盘。

我认为当我们创建一个新的webjob目录时,如果系统检测到一个名为"run.py"的文件,它会尝试执行一些操作。然后有两个进程试图同时访问同一个文件发生冲突。

我的解决方案:我将 python 脚本复制到名为 "myrun.txt" 的 webjob 目录,然后使用 os.rename[=10] 将其重命名为 run.py =]

有效!