Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
-----
Expand Down Expand Up @@ -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"

```


Expand Down
31 changes: 27 additions & 4 deletions lib/capistrano/node-deploy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
}


Expand Down Expand Up @@ -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

Expand Down