Created
July 27, 2008 10:04
-
-
Save weppos/2769 to your computer and use it in GitHub Desktop.
Provides a couple of tasks for creating the database.yml configuration file dynamically when deploy:setup is run.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # = Capistrano database.yml task | |
| # | |
| # Provides a couple of tasks for creating the database.yml | |
| # configuration file dynamically when deploy:setup is run. | |
| # | |
| # Category:: Capistrano | |
| # Package:: Database | |
| # Author:: Simone Carletti <[email protected]> | |
| # Copyright:: 2007-2008 The Authors | |
| # License:: MIT License | |
| # Link:: http://www.simonecarletti.com/ | |
| # Source:: http://gist.github.com/2769 | |
| # | |
| # | |
| # == Requirements | |
| # | |
| # This extension requires the original <tt>config/database.yml</tt> to be excluded | |
| # from source code checkout. You can easily accomplish this by renaming | |
| # the file (for example to database.example.yml) and appending <tt>database.yml</tt> | |
| # value to your SCM ignore list. | |
| # | |
| # # Example for Subversion | |
| # | |
| # $ svn mv config/database.yml config/database.example.yml | |
| # $ svn propset svn:ignore 'database.yml' config | |
| # | |
| # # Example for Git | |
| # | |
| # $ git mv config/database.yml config/database.example.yml | |
| # $ echo 'config/database.yml' >> .gitignore | |
| # | |
| # Additionally, if you want to use a custom template for your <tt>database.yml</tt> file, | |
| # you must store it into a file called <tt>database.yml.erb</tt>. | |
| # The default path for this file is <tt>config/deploy</tt> but you can customize it | |
| # with the variable `template_dir`. | |
| # | |
| # == Usage | |
| # | |
| # Include this file in your <tt>deploy.rb</tt> configuration file. | |
| # | |
| # require 'capistrano_database.yml.rb' | |
| # | |
| # Now, when <tt>deploy:setup</tt> is called, this script will automatically | |
| # create the <tt>database.yml</tt> file in the shared folder. | |
| # Each time you run a deploy, this script will also create a symlink | |
| # from your application <tt>config/database.yml</tt> pointing to the shared configuration file. | |
| # | |
| # == Custom template | |
| # | |
| # By default, this scripts create an exact copy of the default | |
| # <tt>database.yml</tt> file shipped with any new Rails 2.x application. | |
| # If you want to overwrite the default template, simply create a custom Erb template | |
| # called <tt>database.yml.erb</tt> and save it into <tt>config/deploy</tt> folder. | |
| # | |
| # Although the name of the file can't be changed, you can customize the directory | |
| # where it is stored defining a variable called <tt>:template_dir</tt>. | |
| # | |
| # # store your custom template at foo/bar/database.yml.erb | |
| # set :template_dir, "foo/bar" | |
| # | |
| # # example of database template | |
| # | |
| # base: &base | |
| # adapter: sqlite3 | |
| # timeout: 5000 | |
| # development: | |
| # database: #{shared_path}/db/development.sqlite3 | |
| # <<: *base | |
| # test: | |
| # database: #{shared_path}/db/test.sqlite3 | |
| # <<: *base | |
| # production: | |
| # adapter: mysql | |
| # database: #{application}_production | |
| # username: #{user} | |
| # password: #{Capistrano::CLI.ui.ask("Enter MySQL database password: ")} | |
| # encoding: utf8 | |
| # timeout: 5000 | |
| # | |
| # Because this is an Erb template, you can place variables and Ruby scripts | |
| # whithin the file. | |
| # For instance, the template above takes advantage of Capistrano CLI | |
| # to ask for a MySQL database password instead of hard coding it into the template. | |
| # | |
| # === Password prompt | |
| # | |
| # For security reasons, in the example below the password is not | |
| # hard coded (or stored in a variable) but asked on setup. | |
| # I don't like to store passwords in files under version control | |
| # because they will live forever in your history. | |
| # This is why I use the Capistrano::CLI utility. | |
| # | |
| unless Capistrano::Configuration.respond_to?(:instance) | |
| abort "This extension requires Capistrano 2" | |
| end | |
| Capistrano::Configuration.instance.load do | |
| namespace :db do | |
| desc <<-DESC | |
| Creates the database.yml configuration file in shared path. | |
| By default, this task uses a template unless a template \ | |
| called database.yml.erb is found either is :template_dir \ | |
| or /config/deploy folders. The default template matches \ | |
| the template for config/database.yml file shipped with Rails. | |
| DESC | |
| task :setup do | |
| default_template = <<-EOF | |
| base: &base | |
| adapter: sqlite3 | |
| timeout: 5000 | |
| development: | |
| database: #{shared_path}/db/development.sqlite3 | |
| <<: *base | |
| test: | |
| database: #{shared_path}/db/test.sqlite3 | |
| <<: *base | |
| production: | |
| database: #{shared_path}/db/production.sqlite3 | |
| <<: *base | |
| EOF | |
| location = fetch(:template_dir, "config/deploy") + '/database.yml.erb' | |
| template = File.file?(location) ? File.read(location) : default_template | |
| config = ERB.new(template) | |
| run "mkdir -p #{shared_path}/db" | |
| run "mkdir -p #{shared_path}/config" | |
| put config.result(binding), "#{shared_path}/config/database.yml" | |
| end | |
| desc <<-DESC | |
| [internal] Updates the symlink for database.yml file to the just deployed release. | |
| DESC | |
| task :symlink do | |
| run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" | |
| end | |
| end | |
| after "deploy:setup", "db:setup" | |
| after "deploy:symlink", "db:symlink" | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment