Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Django/python web app创建Azure webjobs_Python_Django_Azure_Webjob - Fatal编程技术网

从Django/python web app创建Azure webjobs

从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

我在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\jobs\triggered{my job name}

,并从我的应用程序目录中复制“run.py”

这很有效。然而,当我试图在作业目录中创建一个名为“settings.job”的新文本文件并在其中写入cron计划时,我遇到了一个服务器错误

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

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”文件后尝试访问该文件(可能是将其复制到临时目录?)