如何在 Heroku for Node 应用程序上设置环境变量并连接到 PostgreSQL 数据库?

Posted

技术标签:

【中文标题】如何在 Heroku for Node 应用程序上设置环境变量并连接到 PostgreSQL 数据库?【英文标题】:How to set environment variables on Heroku for Node app and connect to the PostgreSQL database? 【发布时间】: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 - 你能解释一下如何吗?谢谢! 在下面查看我的答案 【参考方案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 命令究竟做了什么,那就太好了 非常高效! - 有没有办法防止值打印到屏幕上? 'sed 命令':geeksforgeeks.org/sed-command-in-linux-unix-with-examples【参考方案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)。

【讨论】:

以上是关于如何在 Heroku for Node 应用程序上设置环境变量并连接到 PostgreSQL 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 node.js 应用程序部署到 heroku?有没有可能?

Node.js - 在 Heroku 上使用 MongoHQ 连接到 MongoDB

如何将数据从 Heroku 上托管的 Node.js 应用程序发送到托管在完全独立(Cpanel)服务器上的 PHP 文件?

如何在 Heroku Node Express 应用程序中使用 LetsEncrypt SSL 证书?

如何将 React 应用程序部署到 Heroku

如何在 Heroku 上使用 Node.js 通信 Web 和 Worker dynos?