【问题标题】:setting environment variables in heroku for flask app在 heroku 中为烧瓶应用程序设置环境变量
【发布时间】:2015-04-04 02:38:24
【问题描述】:

我有一个烧瓶应用程序,它为开发和生产环境使用不同的配置文件。相关的代码是这样的:

app.config.from_object('config.dev')
app.config.from_envvar('SPOTPIX_SETTINGS', silent=True)

当我在本地服务器上开发时,配置取自 config.dev,但是当我将代码推送到 heroku 时,我想将 SPOTPIX_SETTINGS 环境变量设置为指向“config.prod”文件。这可以在 heroku 命令行客户端中完成,如下所示:

heroku config:set SPOTPIX_SETTINGS= 

但是,我不知道应该在等号右侧写什么,因为我无法将生产配置文件的绝对路径分配给环境变量,因为这在 heroku 中与它不同在我的开发机器上。

非常感谢!

【问题讨论】:

    标签: python heroku flask


    【解决方案1】:

    您应该使用env variable 来查看您是在 dev 还是 heroku。

    heroku config:set IS_HEROKU=True 
    

    然后在你的文件中

    import os
    is_prod = os.environ.get('IS_HEROKU', None)
    
    if is_prod:
        #here goes all your heroku config
    

    【讨论】:

    • 谢谢。不过只有一个问题:在第一行中,您编写了以下“app.config.from_envvar('IS_HEROKU',silent=True)”。你为什么这么做?这会暂时使用 IS_HEROKU 环境变量的值填充应用程序配置对象,这是不需要的。写:“if os.environ.get('NOT_HEROKU', None)”然后当满足这个条件时:“app.config.from_object('config.prod')”不是更干净吗?
    • @StenSootla 是的,对不起,我的错,我修好了。
    【解决方案2】:

    我对你的项目一无所知,但 Heroku 有一个系统。

    您无需将生产 (Heroku) 配置变量存储在文件中,而是使用命令行或 Web UI 输入它们。

    命令行方法:

    heroku config:set THEANSWERTOEVERYTHINGEVER=42

    我喜欢 Web UI 方法,因为它很漂亮(在应用设置中)。

    您将如何管理您的开发配置变量是您将在 .env 文件中以 YAML 样式编写它们

    # Contents of .env file in application root (GITIGNORE THIS)
    
    # These are only for your development environment
    
    THEANSWERTOEVERYTHINGEVER=42
    ENVIRONMENT="DEVELOPMENT"
    

    然后在你的应用文件中添加import os

    你可以使用os.environ.get('THEANSWERTOEVERYTHINGEVER')这个语法获取配置变量

    最后但最重要的一步!

    使用heroku local 而不是python mysweetapp.py 启动您的服务器。这将启动 Heorku 的服务器并为您加载本地配置变量。如果您没有 Heroku Toolbelt,可能需要它。

    都在这里。 https://devcenter.heroku.com/articles/getting-started-with-python#define-config-vars

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2016-03-09
      • 2021-05-03
      • 2021-12-23
      • 2021-06-01
      • 2020-07-02
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      相关资源
      最近更新 更多