如何在 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 文件?