actionhero
Version:
actionhero.js is a multi-transport API Server with integrated cluster capabilities and delayed tasks
69 lines (51 loc) • 3.1 kB
Markdown
## Overview
There are 2 ways to manage actionHero configuration: config files and overrides. In both cases, ActionHero starts by reading the config in `./config/`. [Here is a documented example](https://github.com/actionhero/actionhero/blob/master/config/).
The normal way to deal with configuration changes is to use the files in `/config/` and to have special options for each environment. First we load in all settings from the `default` config block, and then we replace those with anything defined in the relevant `environment` section. ActionHero uses the standard node environment variable `NODE_ENV` to determine environment, and defaults to ‘development' when one isn't found. This pattern is very similar the Rails and Sails frameworks. A good way to visualize this is to note that, by default, the web server will return metadata in response JSON, but we change that in the production NODE_ENV and disable it.
```js
exports.default = {
general: function(api){
return {
//...
developmentMode: true
//...
}
}
}
exports.production = {
general: function(api){
return {
developmentMode: false
}
}
}
```
The other way to modify the config is to pass a "changes" hash to the server directly at boot. You can do things like: `{`actionhero.start({configChanges: configChanges}, callback)`}`.
The priority order of configs is:
1. options passed in to boot with `{`actionhero.start({configChanges: configChanges}, callback)`}`
2. environment-specific values in `/config`
3. default values in `/config`
4. default values of undefined settings from a plugin
5. default values of undefined settings from ActionHero's core
When building config files of your own, note that an `exports.default` is always required, and any environment overrides are optional. What is exported is a hash which eventually resolves a synchronous function which accepts the `api` variable.
## Config Changes
A configChanges example:
```js
var actionhero = require("actionhero").actionhero;
var params = {};
params.configChanges = {
general: {
developmentMode: true
}
}
// start the server!
actionhero.start(params, function(error, api){
api.log("Boot Successful!");
});
```
## Boot Options
When launching ActionHero you can specify which config directory to use with `--config=/path/to/dir` or the environment variable `ACTIONHERO_CONFIG`, otherwise `/config/` will be used from your working directory.
The priority of arguments is:
1. Use the project 'config' folder, if it exists.
2. `actionhero --config=PATH1 --config=PATH2 --config=PATH3,PATH4`
3. `ACTIONHERO_CONFIG=PATH1,PATH2 npm start`
Note that if `--config` or `ACTIONHERO_CONFIG` are used, they _overwrite_ the use of the default `/config` folder. If you wish to use both, you need to re-specify "config", e.g. `--config=config,local-config`. Also, note that specifying multiple `--config` options on the command line does exactly the same thing as using one parameter with comma separators, however the environment variable method only supports the comma-delimited syntax.