mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
114 lines
4.6 KiB
Ruby
114 lines
4.6 KiB
Ruby
|
# You must always specify the application and repository for every recipe. The
|
||
|
# repository must be the URL of the repository you want this recipe to
|
||
|
# correspond to. The deploy_to path must be the path on each machine that will
|
||
|
# form the root of the application path.
|
||
|
|
||
|
set :application, "sample"
|
||
|
set :repository, "http://svn.example.com/#{application}/trunk"
|
||
|
|
||
|
# The deploy_to path is optional, defaulting to "/u/apps/#{application}".
|
||
|
|
||
|
set :deploy_to, "/path/to/app/root"
|
||
|
|
||
|
# The user value is optional, defaulting to user-name of the current user. This
|
||
|
# is the user name that will be used when logging into the deployment boxes.
|
||
|
|
||
|
set :user, "flippy"
|
||
|
|
||
|
# By default, the source control module (scm) is set to "subversion". You can
|
||
|
# set it to any supported scm:
|
||
|
|
||
|
set :scm, :subversion
|
||
|
|
||
|
# gateway is optional, but allows you to specify the address of a computer that
|
||
|
# will be used to tunnel other requests through, such as when your machines are
|
||
|
# all behind a VPN or something
|
||
|
|
||
|
set :gateway, "gateway.example.com"
|
||
|
|
||
|
# You can define any number of roles, each of which contains any number of
|
||
|
# machines. Roles might include such things as :web, or :app, or :db, defining
|
||
|
# what the purpose of each machine is. You can also specify options that can
|
||
|
# be used to single out a specific subset of boxes in a particular role, like
|
||
|
# :primary => true.
|
||
|
|
||
|
role :web, "www01.example.com", "www02.example.com"
|
||
|
role :app, "app01.example.com", "app02.example.com", "app03.example.com"
|
||
|
role :db, "db01.example.com", :primary => true
|
||
|
role :db, "db02.example.com", "db03.example.com"
|
||
|
|
||
|
# Define tasks that run on all (or only some) of the machines. You can specify
|
||
|
# a role (or set of roles) that each task should be executed on. You can also
|
||
|
# narrow the set of servers to a subset of a role by specifying options, which
|
||
|
# must match the options given for the servers to select (like :primary => true)
|
||
|
|
||
|
desc <<DESC
|
||
|
An imaginary backup task. (Execute the 'show_tasks' task to display all
|
||
|
available tasks.)
|
||
|
DESC
|
||
|
|
||
|
task :backup, :roles => :db, :only => { :primary => true } do
|
||
|
# the on_rollback handler is only executed if this task is executed within
|
||
|
# a transaction (see below), AND it or a subsequent task fails.
|
||
|
on_rollback { delete "/tmp/dump.sql" }
|
||
|
|
||
|
run "mysqldump -u theuser -p thedatabase > /tmp/dump.sql" do |ch, stream, out|
|
||
|
ch.send_data "thepassword\n" if out =~ /^Enter password:/
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# Tasks may take advantage of several different helper methods to interact
|
||
|
# with the remote server(s). These are:
|
||
|
#
|
||
|
# * run(command, options={}, &block): execute the given command on all servers
|
||
|
# associated with the current task, in parallel. The block, if given, should
|
||
|
# accept three parameters: the communication channel, a symbol identifying the
|
||
|
# type of stream (:err or :out), and the data. The block is invoked for all
|
||
|
# output from the command, allowing you to inspect output and act
|
||
|
# accordingly.
|
||
|
# * sudo(command, options={}, &block): same as run, but it executes the command
|
||
|
# via sudo.
|
||
|
# * delete(path, options={}): deletes the given file or directory from all
|
||
|
# associated servers. If :recursive => true is given in the options, the
|
||
|
# delete uses "rm -rf" instead of "rm -f".
|
||
|
# * put(buffer, path, options={}): creates or overwrites a file at "path" on
|
||
|
# all associated servers, populating it with the contents of "buffer". You
|
||
|
# can specify :mode as an integer value, which will be used to set the mode
|
||
|
# on the file.
|
||
|
# * render(template, options={}) or render(options={}): renders the given
|
||
|
# template and returns a string. Alternatively, if the :template key is given,
|
||
|
# it will be treated as the contents of the template to render. Any other keys
|
||
|
# are treated as local variables, which are made available to the (ERb)
|
||
|
# template.
|
||
|
|
||
|
desc "Demonstrates the various helper methods available to recipes."
|
||
|
task :helper_demo do
|
||
|
# "setup" is a standard task which sets up the directory structure on the
|
||
|
# remote servers. It is a good idea to run the "setup" task at least once
|
||
|
# at the beginning of your app's lifetime (it is non-destructive).
|
||
|
setup
|
||
|
|
||
|
buffer = render("maintenance.rhtml", :deadline => ENV['UNTIL'])
|
||
|
put buffer, "#{shared_path}/system/maintenance.html", :mode => 0644
|
||
|
sudo "killall -USR1 dispatch.fcgi"
|
||
|
run "#{release_path}/script/spin"
|
||
|
delete "#{shared_path}/system/maintenance.html"
|
||
|
end
|
||
|
|
||
|
# You can use "transaction" to indicate that if any of the tasks within it fail,
|
||
|
# all should be rolled back (for each task that specifies an on_rollback
|
||
|
# handler).
|
||
|
|
||
|
desc "A task demonstrating the use of transactions."
|
||
|
task :long_deploy do
|
||
|
transaction do
|
||
|
update_code
|
||
|
disable_web
|
||
|
symlink
|
||
|
migrate
|
||
|
end
|
||
|
|
||
|
restart
|
||
|
enable_web
|
||
|
end
|