我在Azure WebApp中有一个Django项目。项目的设置配置了环境变量,例如:
还有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之间共享这些环境变量?
答案 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", "")
如有任何疑问,请随时告诉我。