An adapter for node-config that sticks configs in heroku env variables instead of reading from the FS.
add it to your package.json
, and use it exactly like node-config:
npm install --save config-heroku
var config = require('config-heroku')
As config-heroku is api compatible with config, you can just globally find & replace require('config')
with require('config-heroku')
to achieve heroku compatibility.
As you'll want a heroku specific config, add a heroku.json
file to your config
folder. It'll act like a production.json
, just only when it's up on heroku. You can add different ones if you want staging/prod setup (see Black Belt Usage below).
You'll need to set up the command line tool to package up your config - you can install it everywhere using:
npm install -g config-heroku
When you're ready to deploy, move the current config over to a heroku environment variable by runnning the save
command:
config-heroku save
You can now safely deploy to heroku and your config will be there.
Just in case you didn't want to run save
every time you update your config, node-config can auto-install a git hook that will take care of auto updating the variable:
hook add
Oops, you changed your mind? It's ok, config-heroku can clean up after itself:
hook remove
No more hook!
This config-heroku also has a grunt task - you can use it like so:
grunt.loadNpmTasks('config-heroku')
then later in your config:
grunt.initConfig({
'config-heroku' : {
configname : 'heroku',
varname : '<%= grunt.config("config-heroku").configname.toUpperCase() %>_CONFIG'
}
})
Now you can automatically update the heroku config vars when building.
You're not convinced. What is the variable called? How does this work?
Don't worry, young grasshoper, here are answers:
-
By default, config-heroku will save it's info as JSON in a variable called "HEROKU_CONFIG".
-
When saving, config-heroku will read from
config/heroku.json
(after inheriting default.json like node-config does) unless specified. -
You can save and specify which config you'd like to save, using
config-heroku save somename
. This will now save using theconfig/somename.json
file instead. -
If you don't like the name
HEROKU_CONFIG
, you can change that too. Just useconfig-heroku save somename MY_VARNAME
. Now you'll have a shiny new environment variable with your special config in it calledMY_VARNAME
. -
Config always defaults to looking for the
HEROKU_CONFIG
variable. If you want to switch the current app to use something else, you can switch it usingconfig-heroku use MY_VARNAME
. Now your app will use theMY_VARNAME
config instead of theHEROKU_CONFIG
one. -
Now you've got a bunch of names to remember and your hook is broken. Don't worry, the
hook
command accepts the same arguments assave
- you can simplyconfig-heroku hook add somename MY_VARNAME
. Now when you commit, theMY_VARNAME
config is updated to the info inconfig/somename.json
.
Ok, smarty pants. Hit config-heroku
with no arguments and it'll spit out this info (you can also specify -h
or --help
, doesn't matter to me.):
Usage: config-heroku [options] [command]
Commands:
save [configname] [varname] [yes]
save closest found production config to heroku env. Var name defaults to "[configname]_CONFIG", configname defaults to "heroku", yes will always save.
hook [add] [configname] [varname]
adds or removes git hook to re-save configs with specified arguments to the nearest .git directory. Use "hook add or hook remove"
use [varname]
tell heroku which config variable to use.
Options:
-h, --help output usage information
That's all.
Github issues is a fine place to put bugs for this project if you find them.
Jesse Ditson