获取heroku数据库地址和凭据,而不是数据库URL
我正在部署一个应用程序,它要求数据库信息作为单独的参数传递,例如获取heroku数据库地址和凭据,而不是数据库URL,heroku,heroku-postgres,Heroku,Heroku Postgres,我正在部署一个应用程序,它要求数据库信息作为单独的参数传递,例如 $ someapp --db-host=example.com --db-port=5433 --db-name=mydb --db-user=me --db-password=mypass 当查看heroku提供的内容时,似乎唯一可用的就是数据库的URL。当然,我可以在Procfile中解析它的值,并提取所有必要的内容,目前我正在考虑类似于小助手脚本的东西,例如parse\u db\u url.py: #/usr/bin/en
$ someapp --db-host=example.com --db-port=5433 --db-name=mydb --db-user=me --db-password=mypass
当查看heroku
提供的内容时,似乎唯一可用的就是数据库的URL
。当然,我可以在Procfile
中解析它的值,并提取所有必要的内容,目前我正在考虑类似于小助手脚本的东西,例如parse\u db\u url.py
:
#/usr/bin/env蟒蛇3
导入操作系统
从sqlalchemy.engine.url导入make\u url
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
url=make\u url(os.environ.get('DATABASE\u url'))
env=f''PG_USER={url.username}
PG_PASSWORD={url.PASSWORD}
PG_HOST={url.HOST}
PG_PORT={url.PORT}
PG_DBNAME={url.database}''
印刷品(环境)
并在程序文件中评估它
:
web: eval $(python parse_db_url.py) && someapp --db-host=$PG_HOST ...
等等,但这是正确的做法还是我只是忽略了什么?如果这是相关的,我将在免费计划atm上进行测试,但如果对部署感到满意,则转向爱好计划。您可以添加自己的环境变量来保存配置(在设置->配置变量下)。只需添加它们并将您的Procfile设置为
web:someapp--db host=$PG\u host…
@yonili如果我正确读取了,我就无法在.env
中保持db连接,因为:您的应用程序的数据库URL
配置变量的值可能随时都会更改。您不应该在Heroku应用程序内部或外部依赖此值。是的-看起来您是对的。我假设如果你不能更改应用程序本身,你应该像以前那样使用它。没有任何东西可以设置为配置变量,将连接字符串解构为相关部分。一个快速的google似乎表明slqalchemy支持直接连接到数据库\u URL
。为什么您要手动解析它?@RangerRanger再次尝试手动解析它,因为我需要部署的应用程序不接受数据库URL,而需要单独的数据库连接参数。为此,我使用了sqlalchemy
,因为我不想自己编写解析。