我通过Heroku设置了一些环境变量来访问GrapheneDB实例。当我使用Heroku CLI命令heroku config
时,所有环境变量都按预期返回。
例如,"heroku config"
返回:
GRAPHENEDB_BOLT_PASSWORD: some_password
GRAPHENEDB_BOLT_URL: bolt://hobby-someletters.dbs.graphenedb.com:24786
GRAPHENEDB_BOLT_USER: appnumbers
GRAPHENEDB_URL: http://appnumbers:some_password@hobby-someletters.dbs.graphenedb.com:24789
NEO4J_REST_URL: GRAPHENEDB_URL
但是,当我尝试使用os.environ.get()
方法访问这些环境变量时,所有三个print语句都返回None
而不是heroku config
返回的所需输出。这将向我表明Python环境无法访问Heroku环境变量。如何让python访问这些?
import os
from py2neo import Graph
graphenedb_url = os.environ.get('GRAPHENEDB_BOLT_URL')
graphenedb_user = os.environ.get("GRAPHENEDB_BOLT_USER")
graphenedb_pass = os.environ.get("GRAPHENEDB_BOLT_PASSWORD")
print(graphenedb_url)
print(graphenedb_user)
print(graphenedb_pass)
我尝试过使用Acess Heroku variables from Flask中的解决方案
但是当我执行命令时:
heroku config:pull --overwrite
CLI返回
config:pull is not a heroku command.
答案 0 :(得分:1)
因为您正在执行一个命令(env
或类似的东西除外)来获取这些配置变量,这意味着它们很可能不在您的正常环境中,这意味着您无法通过{{1 }}
你可以做的是从那个命令的输出中提取它们(示例 - python 2.7 - 假设它们出现在os.environ.get()
上,如果它们还没有检查stdout
in同样的方式):
stderr
注意:
from subprocess import Popen, PIPE
graphenedb_url = graphenedb_user = graphenedb_pass = None
stdout, stderr = Popen(['heroku', 'config'], stdout=PIPE, stderr=PIPE).communicate()
for line in stdout.split('\n'):
split = line.split(':')
if len(split) == 2:
if split[0] == 'GRAPHENEDB_BOLT_URL':
graphenedb_url = split[1].strip()
elif split[0] == 'GRAPHENEDB_BOLT_USER':
graphenedb_user = split[1].strip()
elif split[0] == 'GRAPHENEDB_BOLT_PASSWORD':
graphenedb_pass = split[1].strip()
print graphenedb_url
print graphenedb_user
print graphenedb_pass
,如果不是以同样的方式检查stdout
stderr
可执行文件的完整路径,不确定。