Credit to @bustardcelly and grunt-forever, which this plugin is forked from / based on. This is just that but as a multi task, with a bug or two fixed, and some added features. https://github.com/bustardcelly/grunt-forever
This plugin requires Grunt ~0.4.1
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-forever-multi --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-forever-multi');
Gruntfile.js
foreverMulti: {
basic: {
file: 'test/run.js'
},
appServer: {
action: 'restart',
file: 'test/run.js',
options: ["-m '"+cfgJson.app.name+" port "+cfgJson.server.port+"'"]
},
testServer: {
// action: 'restart', //default is restart if no action specified
file: 'test/run.js',
options: ["config=test", "-m '"+cfgTestJson.app.name+" port "+cfgTestJson.server.port+"'"]
}
}
Command Line
- command line arguments (grunt.option)
action
to override the action (i.e.--action=start
will run the forever start action even if the task config is set torestart
orstop
action)
# run all tasks in this multiTask with their defaults / standard config
grunt foreverMulti
# force a forever restart irregardless of what the config action is
grunt foreverMulti --action=restart
# run just one of the tasks
grunt foreverMulti:appServer
The options / keys for each task mimic forever-monitor/forever: https://github.com/nodejitsu/forever-monitor including file
and action
keys. The only supported options currently are:
file
The file/script to run (i.e.index.js
orserver.js
)action
What to run forever with - see: https://npmjs.org/package/forever. Onlystart
,restart
,stop
are supported currently.options
Command line arguments to pass to forever
Other options including, but not limited to, silent
, uid
, max
, command
, sourceDir
, watch
, logFile
, outFile
, errFile
are NOT currently supported.
- For Continuous Integration - to restart your server(s) after a git push/webhook to get the file changes.
- i.e.: Use grunt to: 1. build new files/assets with the new code, 2. restart forever to update the running server/processes with the new code, 3. wait/timeout (sometimes necessary to allow the server time to fully restart), 4. run automated tests on the new code
See https://npmjs.org/doc/developers.html for notes on publishing npm modules in general.
- run
grunt
to ensure no issues - bump version number in
package.json
- update
CHANGELOG.md
(and potentially thisREADME.md
) file git commit
changesnpm publish
- push to github (to update there as well)
- async / forever issues intermittently.. sometimes
forever.startDaemon
is called but grunt finishes WITHOUTdone()
being called (fromthis.async()
) - this causes the script to exit - sometimes before the forever process is started and it stops future execution of any other tasks in the multi-task.. I'm not sure what's going on here or how to fix.. - add support for more (all?) forever options - i.e.
uid
,command
,watch