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:
1
Capfile
1
Capfile
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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: {}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user