【问题标题】:How can I use a system environment variable inside a pyramid ini file?如何在金字塔 ini 文件中使用系统环境变量?
【发布时间】:2018-10-18 21:01:31
【问题描述】:

我导出了一个名为DBURL='postgresql://string'的变量,我想在我的配置ini文件中使用它,例如::

[app:kotti]
sqlalchemy.url = %(DBURL)s

这不行。

【问题讨论】:

    标签: postgresql sqlalchemy pyramid ini kotti


    【解决方案1】:

    把这个放在你的__init__.py:

    def expandvars_dict(settings):
        """Expands all environment variables in a settings dictionary."""
        return dict((key, os.path.expandvars(value)) for
                    key, value in settings.items())
    

    然后,当您将环境变量导出到 shell 时,正确的语法是这样的:

    sqlalchemy.url = ${DBURL}
    

    在您的.ini 中设置该环境变量后,您就可以使用configparser 语法:

    sqlalchemy.connection = %(sqlalchemy.url)s%(user:pass and other stuff)s
    

    https://stackoverflow.com/a/16446566/2214933窃取的想法

    【讨论】:

    • @b4oshany 对不起,我忘了包含加载设置的功能,所以我编辑了我的答案。这是 Michael Merickel 建议的第三种选择。
    【解决方案2】:

    PasteDeploy(这里使用的是 ini 格式的金字塔)不支持直接从环境变量中读取。几个常见的选项是:

    1) 自己在main 中设置该选项。

    import os
    
    def main(global_config, **settings):
        settings['sqlalchemy.url'] = os.environ['DBURL']
        config = Configurator(settings=settings)
        ...
    

    2) 将您的 ini 文件定义为 jinja2 模板,并使用命令将其呈现为 ini 格式,然后将其作为部署过程的一部分运行。

    【讨论】:

    • 我试图避免这样做。
    • 是的,很抱歉成为坏消息的承担者 - 当我有时间在 PasteDeploy 上工作时它会得到解决,但最近没有发生这种情况
    猜你喜欢
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2013-03-10
    • 2013-06-11
    • 2016-10-19
    • 2014-06-07
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多