diff --git a/README.md b/README.md index 2318911..b3bcb56 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Features - Installs node packages (`npm install`) during deploys, using a shared folder for speed - Automatically creates upstart scripts for your node apps - Provides tasks for starting (`cap node:start`) and stopping (`cap node:stop`) your node app - +- Forever functionality and remote monitor (`cap node:status`) Usage ----- @@ -64,6 +64,21 @@ set :node_user, "james" # Set the name of the upstart command (defaults to #{application}-#{node_env}) set :upstart_job_name, "myserver" + +#Forever related settings + +# set to forever to use forever, defaults to upstart +set :run_method, "forever" + +#Time to wait (millis) between launches of a spinning script. +set :spin_sleep_time, "1000" + +#Minimum uptime (millis) for a script to not be considered "spinning" +set :min_up_time, "1000" + +#Only run the specified script MAX times +set :max_run, "5" + ``` diff --git a/lib/capistrano/node-deploy.rb b/lib/capistrano/node-deploy.rb index b07d28a..d6d8aed 100644 --- a/lib/capistrano/node-deploy.rb +++ b/lib/capistrano/node-deploy.rb @@ -50,6 +50,12 @@ def remote_file_differs?(full_path, content) cd #{current_path} && exec sudo -u #{node_user} NODE_ENV=#{node_env} #{app_environment} #{node_binary} #{current_path}/#{app_command} 2>> #{shared_path}/#{node_env}.err.log 1>> #{shared_path}/#{node_env}.out.log end script EOD + + #Forever related settings + set :run_method, "upstart" unless defined? run_method + set :spin_sleep_time, "1000" unless defined? spin_sleep_time + set :min_up_time, "1000" unless defined? min_up_time + set :max_run, "5" unless defined? max_run } @@ -78,20 +84,37 @@ def remote_file_differs?(full_path, content) sudo "cp #{temp_config_file_path} #{upstart_file_path}" end + desc "Check the status of forever" + task :status do + run "forever list" + end + desc "Start the node application" task :start do - sudo "start #{upstart_job_name}" + if run_method == 'forever' + run "cd #{current_path} && forever -c '#{node_binary}' -m #{max_run} --minUptime #{min_up_time} --spinSleepTime #{spin_sleep_time} -o #{shared_path}/console.log -e #{shared_path}/error.log start #{current_path}/#{app_command}" + else + sudo "start #{upstart_job_name}" + end end desc "Stop the node application" task :stop do - sudo "stop #{upstart_job_name}" + if run_method == 'forever' + run "forever stop #{current_path}/#{app_command}" + else + sudo "stop #{upstart_job_name}" + end end desc "Restart the node application" task :restart do - sudo "stop #{upstart_job_name}; true" - sudo "start #{upstart_job_name}" + if run_method == 'forever' + run "forever restart #{current_path}/#{app_command}" + else + sudo "stop #{upstart_job_name}; true" + sudo "start #{upstart_job_name}" + end end end