Prepare capistrano/db migrations to support more setups (#2)

The following parameters have been added to deploy-secrets.yml:

* **use_rvm**: yes/no
* **ruby_version**: Ruby version for rvm. Defaults to 2.3.2
* **repository**: Git repository. Defaults to the oficial repository
* **branch**: Branch to deploy. Defaults to master
* **rails_env**: Defaults to the stage.

Fixed migrations that required admin rights. Now first check if the postgress extensions are available. If so finish without doing nothin.

Added support for passenger.
This commit is contained in:
Juan Salvador Pérez García
2018-06-08 11:51:44 +02:00
parent 77dd60427d
commit 1db5a00eae
10 changed files with 61 additions and 21 deletions

View File

@@ -10,7 +10,6 @@ require 'capistrano/rails/migrations'
#require 'capistrano/passenger'
require 'capistrano/delayed_job'
require 'whenever/capistrano'
require 'rvm1/capistrano3'
#SCM: Git
require "capistrano/scm/git"

View File

@@ -6,6 +6,11 @@ staging:
user: "xxxxx"
server_name: "staging.consul.es"
full_app_name: "consul"
# use_rvm: Yes
# ruby_version: 2.3.7
# repository: https://github.com/consul/consul.git
# branch: master
# rails_env: staging
preproduction:
deploy_to: "/var/www/consul"

View File

@@ -1,19 +1,23 @@
# config valid only for current version of Capistrano
lock '~> 3.10.1'
def deploysecret(key)
def deploysecret(key, default = 'undefined')
@deploy_secrets_yml ||= YAML.load_file('config/deploy-secrets.yml')[fetch(:stage).to_s]
@deploy_secrets_yml.fetch(key.to_s, 'undefined')
@deploy_secrets_yml.fetch(key.to_s, default)
end
set :rails_env, fetch(:stage)
set :rvm1_ruby_version, '2.3.2'
if deploysecret(:use_rvm, true)
require 'rvm1/capistrano3'
set :rvm1_ruby_version, deploysecret(:ruby_version, '2.3.2')
end
set :application, 'consul'
set :full_app_name, deploysecret(:full_app_name)
set :server_name, deploysecret(:server_name)
set :repo_url, 'https://github.com/consul/consul.git'
set :repo_url, deploysecret(:repository, 'https://github.com/consul/consul.git')
set :revision, `git rev-parse --short #{fetch(:branch)}`.strip
@@ -40,10 +44,22 @@ set(:config_files, %w(
set :whenever_roles, -> { :app }
set :user, deploysecret(:user)
set :ssh_options, -> {
{
user: deploysecret(:user),
forward_agent: true,
compression: 'none',
port: deploysecret(:ssh_port)
}
}
namespace :deploy do
if deploysecret(:use_rvm, true)
before :starting, 'rvm1:install:rvm' # install/update RVM
before :starting, 'rvm1:install:ruby' # install Ruby and create gemset
before :starting, 'install_bundler_gem' # install bundler gem
end
after :publishing, 'deploy:restart'
after :published, 'delayed_job:restart'

View File

@@ -2,7 +2,6 @@ set :deploy_to, deploysecret(:deploy_to)
set :server_name, deploysecret(:server_name)
set :db_server, deploysecret(:db_server)
set :branch, ENV['branch'] || :master
set :ssh_options, port: deploysecret(:ssh_port)
set :stage, :preproduction
set :rails_env, :preproduction

View File

@@ -2,7 +2,6 @@ set :deploy_to, deploysecret(:deploy_to)
set :server_name, deploysecret(:server_name)
set :db_server, deploysecret(:db_server)
set :branch, :stable
set :ssh_options, port: deploysecret(:ssh_port)
set :stage, :production
set :rails_env, :production

View File

@@ -1,11 +1,9 @@
set :deploy_to, deploysecret(:deploy_to)
set :deploy_to, -> { deploysecret(:deploy_to) }
set :server_name, deploysecret(:server_name)
set :db_server, deploysecret(:db_server)
set :branch, ENV['branch'] || :master
set :ssh_options, port: deploysecret(:ssh_port)
set :branch, deploysecret(:branch, ENV['branch']) || :master
set :stage, :staging
set :rails_env, :staging
set :rails_env, deploysecret(:rails_env, 'staging').to_sym
server deploysecret(:server), user: deploysecret(:user), roles: %w(web app db importer cron)

View File

@@ -1,5 +1,11 @@
class AddUnaccentExtension < ActiveRecord::Migration
def change
execute "create extension if not exists unaccent"
return if extension_enabled?('unaccent')
begin
enable_extension 'unaccent'
rescue StandardError => e
raise "Could not create extension unaccent. Please contact with your system administrator: #{e}"
end
end
end

View File

@@ -1,5 +1,11 @@
class AddPgTrgmExtension < ActiveRecord::Migration
def change
execute "create extension if not exists pg_trgm"
return if extension_enabled?('pg_trgm')
begin
enable_extension 'pg_trgm'
rescue StandardError => e
raise "Could not create extension pg_trgm. Please contact with your system administrator: #{e}"
end
end
end

View File

@@ -35,6 +35,9 @@ services:
volumes:
- .:/var/www/consul:delegated
- bundle:/usr/local/bundle:delegated
- "$SSH_AUTH_SOCK:/tmp/agent.sock"
environment:
- SSH_AUTH_SOCK=/tmp/agent.sock
volumes:
docker-example-postgres: {}
bundle: {}

View File

@@ -1,5 +1,6 @@
namespace :deploy do
desc 'Commands for unicorn application'
desc 'Commands for passenger/unicorn application'
if File.exist?("/etc/init.d/unicorn_#{fetch(:full_app_name)}")
%w(start stop force-stop restart upgrade reopen-logs).each do |command|
task command.to_sym do
on roles(:app), in: :sequence, wait: 5 do
@@ -7,4 +8,12 @@ namespace :deploy do
end
end
end
else
task :restart do
on roles(:app), in: :sequence, wait: 5 do
# Your restart mechanism here, for example:
execute :touch, release_path.join('tmp/restart.txt')
end
end
end
end