Untitled

 avatar
unknown
plain_text
2 years ago
4.7 kB
7
Indexable
# config valid for current version and patch releases of Capistrano
lock "~> 3.17.1"

set :application, 'tcm'
set :use_sudo, false
set :ssh_options, { forward_agent: true, port: 9999 }
set :repo_url, 'git@github.com:Gera-IT/tcm.git'  # Edit this to match your repository
set :branch, ENV['BRANCH'] || ENV['branch'] || 'master'

set :format, :pretty
set :log_level, :debug

set :stages, %w(staging production)
set :user, 'deploy'
set :pty, true

set :linked_files, %w{config/database.yml config/puma.rb config/sidekiq.yml public/sitemap.xml public/robots.txt .env config/master.key}
set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets public/system public/uploads .bundle node_modules}

set :keep_releases, 5
# set :rvm_type, :system
set :rvm_custom_path, '/usr/share/rvm'
set :rvm_ruby_version, '3.1.2'  # Edit this to match ruby version you use

set :puma_systemctl_user, :system
set :puma_rackup, -> { File.join(current_path, 'config.ru') }
set :puma_state, -> { "#{shared_path}/tmp/pids/puma.state" }
set :puma_pid, -> { "#{shared_path}/tmp/pids/puma.pid" }
set :puma_bind, -> {"unix://#{shared_path}/tmp/sockets/puma.sock"}    #accept array for multi-bind
# set :puma_conf, "#{shared_path}/puma.rb"
set :puma_access_log, -> { "#{shared_path}/log/puma_access.log" }
set :puma_error_log, -> { "#{shared_path}/log/puma_error.log" }
set :puma_role, :app
set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production'))
set :puma_threads, [0, 8]
set :puma_workers, 0
set :puma_worker_timeout, nil
set :puma_init_active_record, true
set :puma_preload_app, false

set :nginx_sites_available_path, "/etc/nginx/sites-available"
set :nginx_sites_enabled_path, "/etc/nginx/sites-enabled"

set :sidekiq_config, -> { File.join(shared_path, 'config', 'sidekiq.yml') }
set :sidekiq_service_unit_user, :system

set :whenever_identifier, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
set :newrelic_env, fetch(:stage, fetch(:rack_env, fetch(:rails_env, 'production')))

set :slackistrano, {
  klass: Slackistrano::CustomMessaging,
  via_slackbot: false,
  channel: '#tcl_deploy',
  webhook: "https://hooks.slack.com/services/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",
  branch_url: "https://github.com/Gera-IT/tcm/tree/#{fetch :branch}",
  icon_url: -> { 'http://gravatar.com/avatar/885e1c523b7975c4003de162d8ee8fee?r=g&s=40' },
}

namespace :puma do
  desc 'Create Directories for Puma Pids and Socket'
  task :make_dirs do
    on roles(:app) do
      execute "mkdir #{shared_path}/tmp/sockets -p"
      execute "mkdir #{shared_path}/tmp/pids -p"
    end
  end

  before :start, :make_dirs
end

namespace :deploy do
  desc "Make sure local git is in sync with remote."
  task :check_revision do
    on roles(:app) do
      unless `git rev-parse HEAD` == `git rev-parse origin/master`
        puts "WARNING: HEAD is not the same as origin/master"
        puts "Run `git push` to sync changes."
        exit
      end
    end
  end

  desc 'Initial Deploy'
  task :initial do
    on roles(:app) do
      before 'deploy:restart', 'puma:start'
      invoke 'deploy'
    end
  end

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      invoke 'puma:restart'
    end
  end

  desc "Restart Nginx"
  task :nginx_restart do
    on roles(:app) do
      execute "sudo service nginx restart"
    end
  end

  task :invoke do
    fail 'no task provided' unless ENV['task']

    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, ENV['task']
        end
      end
    end
  end

  namespace :check do
    before :linked_files, :set_master_key do
      on roles(:app), in: :sequence, wait: 10 do
        unless test("[ -f #{shared_path}/config/master.key ]")
          upload! 'config/master.key', "#{shared_path}/config/master.key"
        end
      end
    end
  end

  desc 'Minify CSS'
  task :minify_css do
    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :yarn, 'minify:css'
        end
      end
    end
  end

  after  :starting,   :nginx_restart
  after  :finishing,  :compile_assets
  after  :finishing,  :cleanup
  after  :finishing,  :restart
  after 'deploy:assets:precompile', 'deploy:minify_css'
end

# # cap #{ENV} deploy:invoke task=sitemap:refresh

def compile_and_upload_template(from, to, as_root = false)
  template_path = File.expand_path("../templates/#{from}", __FILE__)
  template = ERB.new(File.new(template_path).read).result(binding)
  upload! StringIO.new(template), to

  sudo "chmod 644 #{to}" # ensure default file chmod
  sudo "chown root:root #{to}" if as_root == true
end
Editor is loading...