ninja-deploy

Common shared deployment recipes.

Assumptions

  • The user has local tasks to set up variables specfic to the deploying environment (ie. staging, production, etc.).

Database Recipes

Require the database recipes in your deploy.rb file:

require 'ninja_deploy/recipes/database'

dump

Dependencies:

  • The user acting during the deployment must have permissions to dump the MySQL database.

To Local File

Dumps the contents of a remote database to a MySQL dump file, scp’s the file to /tmp directory.

cap production db:dump:to_local_file

To Local Database

Dumps the contents of a remote database to a MySQL dump file, scp’s the file to /tmp directory, loads the locally configured development database and deletes the local and remote dump files.

cap production db:dump:to_local_db

Dependencies:

  • The configured local development user must have permission to load the database form a MySQL dump file.

To Staging Database

Dumps the contents of a remote database to a MySQL dump file, scp’s the file to /tmp directory of the staging server, loads the locally configured staging database and deletes the local and remote dump files.

cap production db:dump:to_staging_db

Dependencies:

  • The configured staging user must have permission to load the database form a MySQL dump file.

  • The staging machine must be able to ssh to the host that is configured in the recipe.

Deploy Recipes

Require the deploy recipes in your deploy.rb file:

require 'ninja_deploy/recipes/deploy'

web:disable

Presents a maintenance page to visitors.

As Callback:

after "deploy:update_code", "deploy:web:disable"

From Command-Line:

cap production deploy:web:disable REASON="hardware upgrade" UNTIL="12pm Central Time"

Log Recipes

Require the database recipes in your deploy.rb file:

require 'ninja_deploy/recipes/log'

tail

Tails the remote server’s log for the current environment.

cap production log:tail

Passenger Recipes

Require the passenger recipes in your deploy.rb file:

require 'ninja_deploy/recipes/passenger'

restart

Restarts Passenger.

As Callback:

after "deploy:update_code", "passenger:restart"

From Command-Line:

cap production passenger:restart

sudo_restart

Restarts Passenger using sudo.

As Callback:

after "deploy:update_code", "passenger:sudo_restart"

From Command-Line:

cap production passenger:sudo_restart

Sass Recipes

Include the Sass Rake tasks in your deploy.rb:

NinjaDeploy do
  mirror_rake_tasks :sass
end

Run Rake via Bundler, locally and/or remotely, using a configuration:

NinjaDeploy.local_rake_executable  = '/usr/bin/env bundle exec rake'
NinjaDeploy.remote_rake_executable = '/usr/bin/env bundle exec rake'

update

Generates the CSS files from the Sass files.

As Callback:

before "deploy:restart", "sass:update"

From Command-Line:

cap production sass:update

Thinking Sphinx Recipes

Require the thinking sphinx recipes in your deploy.rb file and include the Thinking Sphinx Rake tasks:

require 'ninja_deploy/recipes/thinking_sphinx'

NinjaDeploy do
  mirror_rake_tasks :thinking_sphinx
end

Run Rake via Bundler, locally and/or remotely, using a configuration:

NinjaDeploy.local_rake_executable  = '/usr/bin/env bundle exec rake'
NinjaDeploy.remote_rake_executable = '/usr/bin/env bundle exec rake'

configure

Generates the Thinking Sphinx configuration file from the sphinx.yml file.

As Callback:

after "deploy:update_code", "thinking_sphinx:configure"

From Command-Line:

cap production thinking_sphinx:configure

index

Builds the Sphinx index files.

From Command-Line:

cap production thinking_sphinx:configure

run

Stops Sphinx, if running, then starts Sphinx.

From Command-Line:

cap production thinking_sphinx:ts_run

As Callback:

after "deploy:update_code", "thinking_sphinx:ts_run"

start

Start Sphinx searchd daemon.

As Callback:

after "deploy:update_code", "thinking_sphinx:start"

stop

Stops Sphinx searchd daemon.

As Callback:

after "deploy:update_code", "thinking_sphinx:stop"

stop_using_previous_config

Stops thinking sphinx using the config file in the previous release. Useful when there is not a configuration file in the current release yet.

As Callback:

after "deploy:update_code", "thinking_sphinx:stop_using_previous_config"

restart

Stops and starts the Sphinx searchd daemon.

From Command-Line:

cap production thinking_sphinx:restart

rebuild

Stops the Sphinx searchd daemon, re-indexes and then starts the searchd daemon.

From Command-Line:

cap production thinking_sphinx:rebuild

shared_sphinx_folder

Create the folder in the shared directory to store the Sphinx files.

As Callback:

after "deploy:update_code", "thinking_sphinx:shared_sphinx_folder"

symlink to the folder in the shared directory to store the Sphinx files.

As Callback:

after "deploy:update_code", "thinking_sphinx:symlink_sphinx_indexes"

Version Recipes

Require the version recipes in your deploy.rb file:

require 'ninja_deploy/recipes/version'

write

Writes a public/VERSION file to the remote server.

As Callback:

after "deploy:update_code", "version:write"

Dependencies:

  • branch_tag_or_sha_to_deploy variable

Whenever Recipes

Require the whenever recipes in your deploy.rb file:

require 'ninja_deploy/recipes/whenever'

update_crontab

Updates the crontab file using whenever.

As Callback:

after "deploy:update_code", "whenever:update_crontab"

From Command-Line:

cap production whenever:update_crontab

Dependencies:

  • application variable

RVM Recipes

Require the RVM recipes in your deploy.rb file:

require 'ninja_deploy/recipes/rvm'

trust_rvmrc

As Callback:

after "deploy:update_code", "rvm:trust_rvmrc"

From Command-Line:

cap production rvm:trust_rvmrc

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

License

Released under the MIT License.