Module: Softwear::Library

Defined in:
lib/softwear/library/spec.rb,
lib/softwear/library/enqueue.rb,
lib/softwear/library/capistrano.rb,
lib/softwear/library/api_controller.rb,
lib/softwear/library/controller_authentication.rb

Defined Under Namespace

Modules: ControllerAuthentication, Enqueue, Spec Classes: ApiController

Class Method Summary collapse

Class Method Details

.capistrano(context) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/softwear/library/capistrano.rb', line 3

def self.capistrano(context)
  context.instance_eval do
    Rake::Task["deploy:compile_assets"].clear

    ruby = fetch(:rvm_ruby_string) || fetch(:rvm_ruby_version)

    namespace :deploy do

      desc 'Assure softwear-lib is up to date before deploying'
      task :update_softwear_lib do
        on roles(:app), in: :sequence do
          execute "~/.rvm/bin/rvm #{ruby} do gem install --no-ri --no-rdoc softwear-lib"
        end
      end

      desc 'Signal the running rails app to restart'
      task :restart do
        on roles([:web, :app]), in: :sequence, wait: 5 do
          execute :mkdir, '-p', "#{release_path}/tmp"
          execute :touch, release_path.join('tmp/restart.txt')
        end
      end

      after :publishing, :restart_sidekiq_manager do
        on roles(:sidekiq) do
          execute 'sudo restart sidekiq-manager'
        end
      end

      # This is more problematic than helpful
=begin
      if !$LOAD_PATH.grep(/sunspot_solr/).empty? || fetch(:no_reindex)
        before :publishing, :reindex_solr do
          on roles(:db) do
            with rails_env: fetch(:rails_env) || fetch(:stage) do
              within(release_path) do
                execute :rake, 'sunspot:solr:reindex'
              end
            end
          end
        end
      end
=end

      # This is no longer necessary
      # before :updating, :update_softwear_lib
      after :publishing, :restart

      desc 'Compile assets'
      task :compile_assets => [:set_rails_env] do
        invoke 'deploy:assets:precompile_local'
        invoke 'deploy:assets:backup_manifest'
      end

      namespace :assets do

        desc "Precompile assets locally and then rsync to web servers"
        task :precompile_local do
          # compile assets locally
          run_locally do
            execute "RAILS_ENV=#{fetch(:stage)} bundle exec rake assets:precompile"
          end

          # rsync to each server
          assets_dir = "public/#{fetch(:assets_prefix) || 'assets'}"
          local_dir  = "./#{assets_dir}/"
          on roles( fetch(:assets_roles, [:web]) ) do
            # this needs to be done outside run_locally in order for host to exist
            remote_dir = "#{host.user}@#{host.hostname}:#{release_path}/#{assets_dir}"

            execute "mkdir -p #{release_path}/#{assets_dir}"
            run_locally { execute "rsync -av --delete #{local_dir} #{remote_dir}" }

            if fetch(:asset_sync)
              with rails_env: fetch(:rails_env) || fetch(:stage) do
                within(release_path) do
                  with_rvm(fetch(:task_ruby_version)) { execute :rake, 'assets:sync' }
                end
              end
            end
          end

          # clean up
          run_locally { execute "rm -rf #{local_dir}" }
        end
      end

    end
  end
end