从Django/python web app创建Azure webjobs
我在Azure Web应用程序上部署了一个Django应用程序,我想动态创建webjobs。更准确地说,当我保存名为Importer的Django模型时,我希望能够创建一个新的web作业,由3个文件组成:从Django/python web app创建Azure webjobs,python,django,azure,webjob,Python,Django,Azure,Webjob,我在Azure Web应用程序上部署了一个Django应用程序,我想动态创建webjobs。更准确地说,当我保存名为Importer的Django模型时,我希望能够创建一个新的web作业,由3个文件组成: run.py:Python Web作业 settings.job:cron计划 config.ini:webjob的配置文件 “settings.job”和“config.ini”的内容来自管理表单,并且特定于webjob 当我保存模型时,代码会在中创建一个新目录 App\u Data\j
- run.py:Python Web作业
- settings.job:cron计划
- config.ini:webjob的配置文件
file=open('test.txt','w')
file.write('这是一个测试')
file.close()文件
看来我没有权利将文件写入磁盘。如何解决这个问题?
此外,我希望在更新相应的Django模型时能够修改config和settings.job文件的内容
此外,我尝试将另一个名为“run2.py”的文件复制到webjob目录,但也失败了!我无法复制该目录中运行.py的另一个文件根据您的描述,根据我的经验,我认为问题是由于在代码中使用相对路径造成的 在Azure WebApps上,我们有权在路径
D:/home
下执行任何操作
我的建议是使用绝对路径而不是相对路径,例如D:/home/site/wwwroot/App\u Data/jobs/triggered//test.txt
或/home/site/wwwroot/App\u Data/jobs/triggered//test.txt而不是test.txt
。请确保已通过使用os.path.exists(path)
创建目录和父目录,以检查路径是否存在,并在写入文件之前使用os.makedirs
创建它们
同时,您还可以尝试使用来执行一些操作,例如通过上载zip文件或更新设置.job
来创建webjob。要使用这些WebJobs API,请确保您已在Azure portal上配置了部署凭据
,如下图所示,并在请求标头中添加基本身份验证授权:基本
以下是我的分析:
- 将“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将其重命名为run.py
它起作用了 谢谢!崩溃实际上是由于shutil.copy()函数造成的。该文件被复制到webjob目录中,但随后发生错误,代码失败。有什么想法吗?我也尝试了shutil.copyfile(两个都有绝对路径),但都失败了,因为没有特定的信息,甚至在Azure日志中也没有。只是服务器错误500,但请看下面的答案,我很确定这是因为azure在检测到“run.py”文件后尝试访问该文件(可能是将其复制到临时目录?)