【问题标题】:How to set environment variables on Heroku for Node app and connect to the PostgreSQL database?如何在 Heroku for Node 应用程序上设置环境变量并连接到 PostgreSQL 数据库?
【发布时间】:2017-02-28 10:03:44
【问题描述】:

我知道在堆栈溢出方面存在相同/相似的问题,并且我也阅读了文档-我还是什么都不明白-如何设置这些变量以及在哪里!设置它们。

我的 env/production.js 文件:

module.exports = {
    "DATABASE_URI": process.env.DATABASE_URI,
    "SESSION_SECRET": process.env.SESSION_SECRET,
    "TWITTER": {
       "consumerKey": process.env.TWITTER_CONSUMER_KEY,
       "consumerSecret": process.env.TWITTER_CONSUMER_SECRET,
       "callbackUrl": process.env.TWITTER_CALLBACK
    },
    "FACEBOOK": {
        "clientID": process.env.FACEBOOK_APP_ID,
        "clientSecret": process.env.FACEBOOK_CLIENT_SECRET,
        "callbackURL": process.env.FACEBOOK_CALLBACK_URL
    },
    "GOOGLE": {
        "clientID": process.env.GOOGLE_CLIENT_ID,
        "clientSecret": process.env.GOOGLE_CLIENT_SECRET,
        "callbackURL": process.env.GOOGLE_CALLBACK_URL
    },
    "LOGGING": true
};

在我的 env/development.js 文件中,我设置了变量(链接到我的 PostgreSQL/localhost/xxx)。我需要在 Heroku 中为所有人(谷歌、Facebook 等)设置它们还是只为数据库设置它们,因为我必须用 Heroku 创建一个?我是否将本地数据库的链接保留在我的开发文件中并单独链接到 Heroku 数据库?

我什至不知道我是否应该从命令行执行此操作?!在文档中它说: Heroku config:get CONFIG-VAR-NAME -s >> .env 那么是 Heroku config:get CONFIG-NAME OF MY HEROKU DATABASE -s >> .env 吗?

我是第一次部署,很困惑!帮助:)

【问题讨论】:

  • 可以在 UI 中完成,在应用程序的 heroku 仪表板中,转到设置并设置环境变量
  • 好的,在设置中找到了!谢谢!!另外,对于 facebook 和 google,我会设置 callbackUrl 吗?另外,据我了解,我还想设置 NODE_ENV=production - 你能解释一下如何吗?谢谢!
  • 在下面查看我的答案

标签: node.js heroku environment-variables config


【解决方案1】:

根据documentation,您可以使用heroku CLI

$ heroku config:set DATABASE_URI=database_uri_here
$ heroku config:set SESSION_SECRET=session_secret
... and so on for each variable, 

或者您可以使用 UI https://dashboard-classic.heroku.com/apps/{your-app-name}/settings 并通过网络界面提供相同的变量,正如我在上面的评论中提到的那样

NODE_ENV=production 没有被heroku 特殊处理,因此您需要提供它以及任何其他环境变量

ps:严格来说,这个问题并不真正属于 SO,因为它与编程无关。可能需要移到SU

【讨论】:

    【解决方案2】:
    heroku config:set $(cat .env | sed '/^$/d; /#[[:print:]]*$/d')
    

    从 .env 文件中设置你的配置

    【讨论】:

    • Session is invalid. Must be in the format FOO=bar.
    • 为我工作! ??
    • 太棒了,谢谢!如果有人能解释一下这个 sed 命令究竟做了什么,那就太好了
    • 非常高效! - 有没有办法防止值打印到屏幕上?
    【解决方案3】:

    尤其是数据库连接变量不能通过 Heroku 环境变量工作。 我建议使用dotenv 并通过安装Heroku CLI 为文件设置变量,然后使用bash:

    heroku login
    heroku run bash -a app_name
    

    如果.env 文件不存在,则创建它并向其添加值

    touch .env
    echo "ENV_VAR=value" >> .env
    

    确认文件中的条目

    cat .env
    

    【讨论】:

      【解决方案4】:

      Heroku 现在会在您添加 PostgreSQL 插件时自动设置 DATABASE_URL 环境变量

      然后可以在其他环境变量旁边看到此变量,可能是手动定义的,位于:

      • 设置
      • 配置变量

      添加的变量已经包含秘密身份验证信息,因此您应该按原样使用它。

      如何让它与 Sequelize 一起工作

      我刚刚使用 Sequelize 管理了一个有效的解决方案,如:Deploy FeathersJS App on Heroku 与 Sequelize 所述,您基本上只需要这样做:

      sequelize = new Sequelize(process.env.DATABASE_URL, {
          dialect: 'postgres',
          protocol: 'postgres',
          dialectOptions: {
              ssl: {
                  require: true,
                  rejectUnauthorized: false
              }
          }
      });
      

      如提及:Can't connect to heroku postgresql database from local node app with sequelize

      【讨论】:

        【解决方案5】:

        在 Heroku CLI 中登录:

        heroku login
        

        列出所有应用:

        heroku apps
        

        大量导出环境变量

        cat .env | tr '\n' ' ' | xargs heroku config:set -a your_app
        

        【讨论】:

          【解决方案6】:

          另一种选择:

          $ heroku login

          然后编辑所有配置变量:

          $ VISUAL="emacs" heroku config:edit -a <app_name>

          这会打开 emacs,您可以在其中复制/粘贴整个 .env 内容。然后保存退出(Ctrl+x Ctrl+s, Ctrl+x Ctrl+c)。

          【讨论】:

            猜你喜欢
            • 2021-06-01
            • 2021-12-23
            • 1970-01-01
            • 2017-09-20
            • 1970-01-01
            • 1970-01-01
            • 2015-04-04
            • 1970-01-01
            • 2021-07-28
            相关资源
            最近更新 更多