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/passenger'
require 'capistrano/delayed_job' require 'capistrano/delayed_job'
require 'whenever/capistrano' require 'whenever/capistrano'
require 'rvm1/capistrano3'
#SCM: Git #SCM: Git
require "capistrano/scm/git" require "capistrano/scm/git"

View File

@@ -6,6 +6,11 @@ staging:
user: "xxxxx" user: "xxxxx"
server_name: "staging.consul.es" server_name: "staging.consul.es"
full_app_name: "consul" 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: preproduction:
deploy_to: "/var/www/consul" deploy_to: "/var/www/consul"

View File

@@ -1,19 +1,23 @@
# config valid only for current version of Capistrano # config valid only for current version of Capistrano
lock '~> 3.10.1' 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 ||= 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 end
set :rails_env, fetch(:stage) 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 :application, 'consul'
set :full_app_name, deploysecret(:full_app_name) set :full_app_name, deploysecret(:full_app_name)
set :server_name, deploysecret(:server_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 set :revision, `git rev-parse --short #{fetch(:branch)}`.strip
@@ -40,10 +44,22 @@ set(:config_files, %w(
set :whenever_roles, -> { :app } 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 namespace :deploy do
before :starting, 'rvm1:install:rvm' # install/update RVM if deploysecret(:use_rvm, true)
before :starting, 'rvm1:install:ruby' # install Ruby and create gemset before :starting, 'rvm1:install:rvm' # install/update RVM
before :starting, 'install_bundler_gem' # install bundler gem before :starting, 'rvm1:install:ruby' # install Ruby and create gemset
before :starting, 'install_bundler_gem' # install bundler gem
end
after :publishing, 'deploy:restart' after :publishing, 'deploy:restart'
after :published, 'delayed_job: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 :server_name, deploysecret(:server_name)
set :db_server, deploysecret(:db_server) set :db_server, deploysecret(:db_server)
set :branch, ENV['branch'] || :master set :branch, ENV['branch'] || :master
set :ssh_options, port: deploysecret(:ssh_port)
set :stage, :preproduction set :stage, :preproduction
set :rails_env, :preproduction set :rails_env, :preproduction

View File

@@ -2,7 +2,6 @@ set :deploy_to, deploysecret(:deploy_to)
set :server_name, deploysecret(:server_name) set :server_name, deploysecret(:server_name)
set :db_server, deploysecret(:db_server) set :db_server, deploysecret(:db_server)
set :branch, :stable set :branch, :stable
set :ssh_options, port: deploysecret(:ssh_port)
set :stage, :production set :stage, :production
set :rails_env, :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 :server_name, deploysecret(:server_name)
set :db_server, deploysecret(:db_server) set :db_server, deploysecret(:db_server)
set :branch, ENV['branch'] || :master set :branch, deploysecret(:branch, ENV['branch']) || :master
set :ssh_options, port: deploysecret(:ssh_port)
set :stage, :staging 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) server deploysecret(:server), user: deploysecret(:user), roles: %w(web app db importer cron)

View File

@@ -1,5 +1,11 @@
class AddUnaccentExtension < ActiveRecord::Migration class AddUnaccentExtension < ActiveRecord::Migration
def change 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
end end

View File

@@ -1,5 +1,11 @@
class AddPgTrgmExtension < ActiveRecord::Migration class AddPgTrgmExtension < ActiveRecord::Migration
def change 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
end end

View File

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

View File

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