namespace :postgresql do
desc 'Setup postgresql for application' task :setup do # Ask information ask :postgresql_user, "Postgresql username" puts fetch(:postgresql_user) ask :postgresql_password, "Postgresql password for #{fetch(:postgresql_user)}" puts fetch(:postgresql_password) ask :postgresql_database, "Postgresql database" puts fetch(:postgresql_database) ask :create_db_user, "Create database user? Yes(y) or No(n)" puts fetch(:create_db_user) ask :create_db, "Create database? Yes(y) or No(n)" puts fetch(:create_db) ask :use_hipchat, "Do you want to add hipchat token? Yes(y) or No(n)" puts fetch(:use_hipchat) if fetch(:use_hipchat).casecmp('y') == 0 ask :hipchat_token, "Hipchat token" puts fetch(:hipchat_token) end # Run queries on roles(:app) do if fetch(:create_db_user).casecmp('y') == 0 puts 'Creating user with password' # Create database user sudo %Q{sudo -u postgres psql -c "create user #{fetch(:postgresql_user)} with password '#{fetch(:postgresql_password)}';"} end if fetch(:create_db).casecmp('y') == 0 puts 'Creating database with owner' sudo %Q{sudo -u postgres psql -c "create database "#{fetch(:postgresql_database)}_#{fetch(:rails_env)}" owner #{fetch(:postgresql_user)} encoding 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE template0;"} end puts 'Creating database.yml.' # Configure database settings execute "mkdir -p #{fetch(:shared_path)}/config" template 'database.yml.erb', "#{fetch(:shared_path)}/config/database.yml" puts 'Creating backup model.' # Check model is exist full_path = "/home/#{fetch(:local_user)}/Backup/models/#{fetch(:application)}.rb" if 'true' == capture("if [ -e #{full_path} ]; then echo 'true'; fi").strip execute "mv #{full_path} #{full_path}.#{Time.now.to_i}" end # Generate new model gem_execute "backup generate:model -t #{fetch(:application)} --storages=local --compressor=gzip --databases=postgresql" execute "rm #{full_path}" template 'backup_model.erb', full_path puts "Now edit #{full_path}" end end desc 'Restart postgresql' task :restart do on roles(:app) do puts 'Postgresql restarting' sudo 'service postgresql restart' end end
end