使用Django的

时间:2016-04-29 09:50:26

标签: python django azure azure-webjobs

我在Azure WebApp中有一个Django项目。项目的设置配置了环境变量,例如:

enter image description here

还有settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': os.getenv("POSTGRES_DB"),  
        'USER': os.getenv("POSTGRES_USER"),
        'PASSWORD': os.getenv("POSTGRES_PASSWOR), 
        'HOST': os.getenv("POSTGRES_HOST"),  
        'PORT': '', 
    }
}

另一方面,该项目有一个运行Django命令的WebJob:

app_data
 |--jobs
     |--triggered
         |--my_webjob
             |--run.py
             |--settings.job

WebJob的脚本,run.py:

import sys
sys.path.append(r"D:\\home\\site\\wwwroot\\env\\Lib\\site-packages")
sys.path.append(r"D:\\home\\site\\wwwroot")
import django
from django.core.management import call_command


django.setup()
call_command('my_webjob')

我的命令“my_webjob”尝试做一些事情,但是没有得到WebApp的环境变量, 如果我打印环境,这就是结果:

my_webjob.py

class Command(BaseCommand):
    def handle(self, *args, **options):
        print "================="
        print "DEBUG: ENVS"
        print "================="
        print "POSTGRES_USER:"
        print os.getenv("POSTGRES_USER", "")
        print "---------------"
        print "POSTGRES_DB:"
        print os.getenv("POSTGRES_DB", "")

WebJob运行时的输出:

[04/29/2016 08:32:51 > 5d941a: INFO] =================
[04/29/2016 08:32:51 > 5d941a: INFO] DEBUG: ENVS
[04/29/2016 08:32:51 > 5d941a: INFO] =================
[04/29/2016 08:32:51 > 5d941a: INFO] POSTGRES_USER:
[04/29/2016 08:32:51 > 5d941a: INFO] 
[04/29/2016 08:32:51 > 5d941a: INFO] ---------------
[04/29/2016 08:32:51 > 5d941a: INFO] POSTGRES:
[04/29/2016 08:32:51 > 5d941a: INFO] 

除此问题外,WebApp和WebJobs正常工作。 一个简单的解决方案是将我的环境变量写入文件并在webjobs中读取,但我需要所有的密码,网址...存储在环境变量中,

如何在项目和WebJobs之间共享这些环境变量?

1 个答案:

答案 0 :(得分:0)

它在我身边很好用。您是否从Azure Web作业的输出日志中收到任何错误消息?

以下是我的测试脚本供您参考:

WebJob.py (因为我使用Azure Django模板构建测试环境。仅使用默认配置):

import sys
import os
sys.path.append(r"D:\\home\\site\\wwwroot\\env\\Lib\\site-packages")
sys.path.append(r"D:\\home\\site\\wwwroot")
import django
from django.core.management import call_command

os.environ.setdefault(
        "DJANGO_SETTINGS_MODULE",
        "DjangoWebProject.settings"
    )

django.setup()
call_command('my_webjob')

my_webjob.py

from django.core.management.base import BaseCommand, CommandError
import os
class Command(BaseCommand):
    def handle(self, *args, **options):
        print "================="
        print "DEBUG: ENVS"
        print "================="
        print "SOME_CUSTOM_SETTINGS:"
        print os.getenv("SOME_CUSTOM_SETTINGS", "")

如有任何疑问,请随时告诉我。