openteam-capistrano 1.0.12 → 1.0.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7030132e8e05a25491e2bc13d81a77ee68bd591
4
- data.tar.gz: 3b4ba6edef3bf2ec18ac079a38c7648f99366ccf
3
+ metadata.gz: 6d955585c6c9422fa3460602caa4c252e303dcad
4
+ data.tar.gz: 1c579d7534cc7faa4fc6174d30d1ef04793a6a0a
5
5
  SHA512:
6
- metadata.gz: a8ce9172656460cf38cb398095e1eddfb7fcd03947a814e1ab3b07949a725f4bb6ba68977caa11cd499c80244ffb1c1fd8a57c80ae56ddeed46edda590fa15d0
7
- data.tar.gz: c2cd608f56eca6fadd2ea38c8eca0ef44eacb52a836da3fff22becf1ec4bc36d5814bdb515262b06d92fd983ceff046e6da1bb6d1888b0d60eaa2cac8954197c
6
+ metadata.gz: dfe4eda293050b3965f7b3c379d666f9d837efc377876b8a161a5f77f726df81db6373eddab21a8a609329f42dd813b2f94bb633f74824eaf4be8c6269a75862
7
+ data.tar.gz: db4671740d357f9417cbcbd81bdb4581f1c1f2b2f05cbba12b5b82842d4ac7786722ebf8f9d31c7a1a1cb14c14ebfac58ce4a5fd16067a326e66b0e01ffc6746
data/README.md CHANGED
@@ -2,20 +2,18 @@
2
2
 
3
3
  Добавлена поддержка Capistrano v3.
4
4
 
5
+ ###### Обновлен до версии 3.5
6
+
5
7
  ## Установка
6
8
 
7
9
  Добавить в Gemfile:
8
10
 
9
- gem 'openteam-capistrano', '~> 1.0.7'
11
+ gem 'openteam-capistrano', '~> 1.0.12'
10
12
 
11
13
  Затем выполнить:
12
14
 
13
15
  $ bundle
14
16
 
15
- Или установить gem:
16
-
17
- $ gem install openteam-capistrano
18
-
19
17
  ## Использование
20
18
 
21
19
  * Удаляем все что связано с capistrano v2 (Capfile, config/deploy.rb, config/deploy/)
@@ -24,10 +22,18 @@
24
22
  Запускаем генератор:
25
23
 
26
24
  $ rails g openteam:capistrano:install
27
-
25
+
26
+ Необходимо поправить Capfile, если версия Airbrake >= 4
27
+
28
+ $ vim Capfile
29
+
30
+ Удалить строчку 4 и раскоментировать 5
31
+
32
+ Если AirBrake < 4, то ничего делать не надо.
33
+
28
34
  В папке config/deploy/ должны остаться файлы соответствующие стейджам.
29
35
  В Capfile необходимо раcкомментировать необходимые задачи для Sidekiq и Whenever если это необходимо.
30
-
36
+
31
37
  Деплой приложения:
32
38
 
33
39
  $ bundle exec cap STAGE deploy
@@ -40,11 +46,14 @@
40
46
 
41
47
  В Capistrano v3 изменилась схема работы со стейджами - теперь обязательно указывать стейдж при деплое. Опция set :default_stage была удалена.
42
48
 
43
- В папке config/deploy/ должен лежать пустой файл с именем стейджа, деплой должен происходить из бранча с таким же именем что и стейдж.
49
+ В папке config/deploy/ должен лежать пустой файл с именем стейджа, деплой должен происходить из бранча с таким же именем что и стейдж.
44
50
 
45
- В бренч из которого производится деплой нельзя делать комиты. Разработка ведется в мастере! Перед деплоем делаем:
51
+ В бренч из которого производится деплой нельзя делать комиты. Разработка ведется в мастере! Перед деплоем делаем:
52
+
53
+ $ git checkout STAGE
54
+ $ git rebase master
55
+ $ git push
56
+ $ git checkout master
57
+ $ bundle exec cap STAGE deploy
46
58
 
47
- $ git checkout BRANCH
48
- $ git rebase master
49
- $ bundle exec cap BRANCH deploy
50
-
59
+ ###### Если нет необходимости в разделенных ветках (например, приложение очень маленькое и не относится ни к одной из веток разработки (ato, tusur, esp)), то можно использовать ветку master и деплоить из неё.
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
@@ -1,14 +1,14 @@
1
1
  require 'capistrano/setup'
2
2
  require 'capistrano/deploy'
3
+ require 'slackistrano/capistrano'
3
4
 
4
- require 'airbrake/capistrano3'
5
5
  require 'capistrano-db-tasks'
6
6
  require 'capistrano3/unicorn'
7
7
  require 'capistrano/rvm'
8
8
  require 'capistrano/bundler'
9
9
  require 'capistrano/rails/assets'
10
10
  require 'capistrano/rails/migrations'
11
- #require 'capistrano/sidekiq'
12
- #require 'whenever/capistrano'
11
+ # require 'capistrano/sidekiq'
12
+ # require 'whenever/capistrano'
13
13
 
14
14
  require 'openteam/capistrano/tasks'
@@ -1 +1,4 @@
1
1
  require 'openteam/capistrano/deploy'
2
+
3
+ set :slackistrano, channel: '#your-channel',
4
+ webhook: 'your-incoming-webhook-url'
@@ -14,7 +14,7 @@ timeout 360
14
14
  working_directory app_dir
15
15
 
16
16
  # Set up socket location
17
- listen "#{app_dir}/tmp/sockets/unicorn.sock", :backlog => 64
17
+ listen "#{app_dir}/tmp/sockets/unicorn.sock", backlog: 64
18
18
 
19
19
  # Loging
20
20
  stderr_path "#{app_dir}/log/unicorn.stderr.log"
@@ -24,9 +24,9 @@ stdout_path "#{app_dir}/log/unicorn.stdout.log"
24
24
  pid "#{app_dir}/tmp/pids/unicorn.pid"
25
25
 
26
26
  before_fork do |server, worker|
27
- defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
27
+ defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect!
28
28
  old_pid = "#{server.config[:pid]}.oldbin"
29
- if File.exists?(old_pid) && server.pid != old_pid
29
+ if File.exist?(old_pid) && server.pid != old_pid
30
30
  begin
31
31
  sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
32
32
  Process.kill(sig, File.read(old_pid).to_i)
@@ -36,10 +36,10 @@ before_fork do |server, worker|
36
36
  end
37
37
  end
38
38
 
39
- after_fork do |server, worker|
40
- defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
39
+ after_fork do |_server, _worker|
40
+ defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
41
41
  end
42
42
 
43
- before_exec do |server|
43
+ before_exec do |_server|
44
44
  ENV['BUNDLE_GEMFILE'] = "#{app_dir}/Gemfile"
45
45
  end
@@ -5,10 +5,15 @@ if fetch(:stage) && !fetch(:stage).empty?
5
5
  require 'openteam/capistrano/app_config'
6
6
  require 'openteam/capistrano/git'
7
7
  require 'openteam/capistrano/hooks'
8
- require 'openteam/capistrano/sidekiq' if used_sidekiq?
8
+ require 'openteam/capistrano/sidekiq' if used_sidekiq?
9
9
  require 'openteam/capistrano/shared'
10
10
  require 'openteam/capistrano/ssh'
11
11
  require 'openteam/capistrano/tagging'
12
12
  require 'openteam/capistrano/unicorn' if used_unicorn?
13
13
  require 'openteam/capistrano/whenever' if used_whenever?
14
+
15
+ if used_settings?
16
+ require 'configliere'
17
+ Settings.read('config/settings.yml')
18
+ end
14
19
  end
@@ -1,5 +1,5 @@
1
1
  if used_deploy_config?
2
- YAML::load(File.open('config/deploy.yml'))[fetch(:stage).to_s].each do |k, v|
2
+ YAML.load(File.open('config/deploy.yml'))[fetch(:stage).to_s].each do |k, v|
3
3
  set k.to_sym, v
4
4
  end if fetch(:stage)
5
5
  else
@@ -1,3 +1,3 @@
1
- set :repo_url, %x( git config --get remote.origin.url ).chomp
1
+ set :repo_url, `git config --get remote.origin.url`.chomp
2
2
  set :branch, fetch(:stage)
3
- set :user, %x( git config --get user.name ).chomp
3
+ set :user, `git config --get user.name`.chomp
@@ -34,7 +34,6 @@ begin
34
34
  rescue LoadError
35
35
  end
36
36
 
37
-
38
37
  def used_db?
39
38
  !@used_db.nil?
40
39
  end
@@ -44,7 +43,7 @@ def used_delayed_job?
44
43
  end
45
44
 
46
45
  def used_deploy_config?
47
- @used_deploy_config ||= File.exists?('config/deploy.yml')
46
+ @used_deploy_config ||= File.exist?('config/deploy.yml')
48
47
  end
49
48
 
50
49
  def used_sidekiq?
@@ -52,7 +51,7 @@ def used_sidekiq?
52
51
  end
53
52
 
54
53
  def used_rails?
55
- @used_rails ||= File.exists?('config/application.rb') && File.exists?('config/environment.rb')
54
+ @used_rails ||= File.exist?('config/application.rb') && File.exist?('config/environment.rb')
56
55
  end
57
56
 
58
57
  def used_rmq?
@@ -68,5 +67,9 @@ def used_unicorn?
68
67
  end
69
68
 
70
69
  def used_whenever?
71
- @used_whenever ||= File.exists?('config/schedule.rb')
70
+ @used_whenever ||= File.exist?('config/schedule.rb')
71
+ end
72
+
73
+ def used_settings?
74
+ @used_settings ||= File.exist?('config/settings.yml')
72
75
  end
@@ -1,6 +1,5 @@
1
1
  after 'deploy', 'deploy:tagging:create'
2
2
  after 'deploy:publishing', 'unicorn:restart'
3
- after 'unicorn:restart', 'airbrake:deploy'
4
3
  before 'deploy:cleanup', 'deploy:tagging:clean'
5
4
  after 'sunspot:pull', 'sunspot:reload' if used_solr?
6
5
  after 'sunspot:clear', 'sunspot:reload' if used_solr?
@@ -1,4 +1,4 @@
1
- set :linked_dirs, %w{ bin bundle log public/system tmp/cache tmp/pids tmp/sockets }
2
- set :linked_files, %w{ config/settings.yml }
1
+ set :linked_dirs, %w(bin bundle log public/system tmp/cache tmp/pids tmp/sockets)
2
+ set :linked_files, %w(config/settings.yml)
3
3
 
4
- set :linked_files, fetch(:linked_files) + %w{ config/database.yml } if used_db?
4
+ set :linked_files, fetch(:linked_files) + %w(config/database.yml) if used_db?
@@ -21,9 +21,10 @@ class Solr
21
21
  end
22
22
 
23
23
  private
24
+
24
25
  def really_replicate
25
26
  print 'Wait while solr replicated '
26
- local.send_replication_command :fetchindex, :masterUrl => "#{remote.url}"
27
+ local.send_replication_command :fetchindex, masterUrl: remote.url.to_s
27
28
  while base_local_index_version == local.index_version
28
29
  print '.'
29
30
  sleep 0.5
@@ -48,28 +49,28 @@ class Solr
48
49
  end
49
50
 
50
51
  def send_version_command
51
- send_command 'replication', :params => { :command => :indexversion}
52
+ send_command 'replication', params: { command: :indexversion }
52
53
  end
53
54
 
54
- def send_replication_command(command, extra={})
55
- send_command 'replication', :params => { :command => command }.merge(extra)
56
- puts "Index has been successfully received"
55
+ def send_replication_command(command, extra = {})
56
+ send_command 'replication', params: { command: command }.merge(extra)
57
+ puts 'Index has been successfully received'
57
58
  end
58
59
 
59
60
  def send_reload_core_command(core)
60
- send_command '/cores/admin/cores', :params => { :action => 'RELOAD', :core => core }
61
+ send_command '/cores/admin/cores', params: { action: 'RELOAD', core: core }
61
62
  puts "The '#{core}' core has been successfully reloaded"
62
63
  end
63
64
 
64
65
  def send_clear_command(core)
65
- send_command 'update', :params => { :commit => true, 'stream.body' => '<delete><query>*:*</query></delete>' }
66
+ send_command 'update', params: { :commit => true, 'stream.body' => '<delete><query>*:*</query></delete>' }
66
67
  puts "The '#{core}' core has been successfully cleared"
67
68
  end
68
69
 
69
70
  private
70
71
 
71
72
  def solr
72
- @solr ||= RSolr.connect :url => url
73
+ @solr ||= RSolr.connect url: url
73
74
  end
74
75
 
75
76
  def send_command(href, params)
@@ -78,10 +79,9 @@ class Solr
78
79
  STDERR.puts "!!! ensure solr started on '#{url}' !!!"
79
80
  puts "Couldn't connect to '#{url}'"
80
81
  exit
81
- rescue RSolr::Error::Http #=> e
82
- STDERR.puts "!!! RSolr error !!!"
82
+ rescue RSolr::Error::Http #=> e
83
+ STDERR.puts '!!! RSolr error !!!'
83
84
  puts "Could not perform action '#{href}'"
84
85
  exit
85
86
  end
86
-
87
87
  end
@@ -1,6 +1,6 @@
1
1
  require 'net/ssh/proxy/command'
2
2
 
3
3
  server fetch(:domain),
4
- ssh_options: {
5
- proxy: Net::SSH::Proxy::Command.new("ssh #{fetch(:gateway)} -W %h:%p")
6
- } if fetch(:gateway)
4
+ ssh_options: {
5
+ proxy: Net::SSH::Proxy::Command.new("ssh #{fetch(:gateway)} -W %h:%p")
6
+ } if fetch(:gateway)
@@ -4,15 +4,15 @@ module Openteam
4
4
  module Capistrano
5
5
  class Tag
6
6
  def create
7
- %x( git tag -a '#{tag_name}' -m 'Deployed by #{fetch(:user)}' origin/#{fetch(:branch)} )
8
- %x( git push origin '#{tag_name}' )
7
+ `git tag -a '#{tag_name}' -m 'Deployed by #{fetch(:user)}' origin/#{fetch(:branch)}`
8
+ `git push origin '#{tag_name}'`
9
9
  end
10
10
 
11
11
  def clean
12
12
  get_tags
13
13
  return if rotten_tags.empty?
14
- %x( git tag -d #{rotten_tags.join(' ')} )
15
- %x( git push origin #{rotten_tags.map{|t| ":refs/tags/#{t}"}.join(' ')} )
14
+ `git tag -d #{rotten_tags.join(' ')}`
15
+ `git push origin #{rotten_tags.map { |t| ":refs/tags/#{t}" }.join(' ')}`
16
16
  end
17
17
 
18
18
  private
@@ -22,19 +22,19 @@ module Openteam
22
22
  end
23
23
 
24
24
  def formatted_local_time
25
- Time.now.strftime("%Y.%m.%d-%H%M")
25
+ Time.now.strftime('%Y.%m.%d-%H%M')
26
26
  end
27
27
 
28
28
  def get_tags
29
- %x( git fetch --tags )
29
+ `git fetch --tags`
30
30
  end
31
31
 
32
32
  def stage_tags
33
- @stage_tags ||= %x( git tag -l #{fetch(:branch)}* ).chomp.split("\n").grep(/^#{fetch(:stage)}-/)
33
+ @stage_tags ||= `git tag -l #{fetch(:branch)}*`.chomp.split("\n").grep(/^#{fetch(:stage)}-/)
34
34
  end
35
35
 
36
36
  def rotten_tags
37
- stage_tags[0..-fetch(:keep_releases)-1]
37
+ stage_tags[0..-fetch(:keep_releases) - 1]
38
38
  end
39
39
  end
40
40
  end
@@ -18,7 +18,7 @@ begin
18
18
  end
19
19
 
20
20
  namespace :sunspot do
21
- desc "Synchronize your local solr using remote solr data"
21
+ desc 'Synchronize your local solr using remote solr data'
22
22
  task :pull do
23
23
  puts
24
24
  remote_solr_url = ''
@@ -28,7 +28,7 @@ begin
28
28
  remote_solr_url = capture(:ruby, " -ryaml -e \"#{ruby_expression}\"")
29
29
  end
30
30
 
31
- Solr::Replicator.new(:remote => remote_solr_url, :local => development_solr_url).replicate
31
+ Solr::Replicator.new(remote: remote_solr_url, local: development_solr_url).replicate
32
32
  end
33
33
 
34
34
  desc 'Reload development core'
@@ -1,14 +1,13 @@
1
1
  namespace :deploy do
2
2
  namespace :tagging do
3
- desc "Create release tag in local and origin repo"
3
+ desc 'Create release tag in local and origin repo'
4
4
  task :create do
5
5
  Openteam::Capistrano::Tag.new.create
6
6
  end
7
7
 
8
- desc "Remove release tag from local and origin repo"
8
+ desc 'Remove release tag from local and origin repo'
9
9
  task :clean do
10
10
  Openteam::Capistrano::Tag.new.clean
11
11
  end
12
12
  end
13
13
  end
14
-
@@ -1,2 +1,2 @@
1
- tasks_dir = File.expand_path("../tasks", __FILE__)
1
+ tasks_dir = File.expand_path('../tasks', __FILE__)
2
2
  Dir.glob("#{tasks_dir}/*.rake").each { |r| load r }
@@ -1,2 +1,2 @@
1
1
  set :rails_env, :production
2
- set :unicorn_config_path, File.join(current_path, "config/unicorn.rb")
2
+ set :unicorn_config_path, File.join(current_path, 'config/unicorn.rb')
@@ -4,25 +4,26 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = 'openteam-capistrano'
7
- gem.version = '1.0.12'
8
- gem.authors = ["OpenTeam developers"]
9
- gem.email = ["developers@openteam.ru"]
10
- gem.description = %q{OpenTeam common capistrano3 recipe}
11
- gem.summary = %q{Adds common use case tasks (import db, reload unicorn, send airbrake notice, tag deploy)}
12
- gem.homepage = ""
7
+ gem.version = '1.0.15'
8
+ gem.authors = ['OpenTeam developers']
9
+ gem.email = ['developers@openteam.ru']
10
+ gem.description = 'OpenTeam common capistrano3 recipe'
11
+ gem.summary = 'Adds common use case tasks (import db, reload unicorn, send airbrake notice, tag deploy)'
12
+ gem.homepage = ''
13
13
 
14
- gem.files = `git ls-files`.split($/)
15
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
15
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
16
16
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
17
- gem.require_paths = ["lib"]
17
+ gem.require_paths = ['lib']
18
18
 
19
- gem.add_dependency 'airbrake', '~> 3.1.16'
20
- gem.add_dependency 'capistrano', '~> 3.1'
21
- gem.add_dependency 'capistrano-db-tasks', '~> 0.3'
22
- gem.add_dependency 'capistrano-rails', '~> 1.1'
19
+ gem.add_dependency 'airbrake' # , '~> 3.1.16'
20
+ gem.add_dependency 'capistrano', '~> 3.5.0'
21
+ gem.add_dependency 'capistrano-db-tasks' # , '~> 0.3'
22
+ gem.add_dependency 'capistrano-rails' # , '~> 1.1'
23
23
  gem.add_dependency 'capistrano-rvm'
24
24
  gem.add_dependency 'capistrano-sidekiq'
25
25
  gem.add_dependency 'capistrano3-unicorn'
26
+ gem.add_dependency 'slackistrano', '3.1.0.beta'
26
27
 
27
28
  gem.add_development_dependency 'rake'
28
29
  end
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openteam-capistrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.12
4
+ version: 1.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTeam developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-20 00:00:00.000000000 Z
11
+ date: 2016-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.1.16
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.1.16
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: capistrano
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.1'
33
+ version: 3.5.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.1'
40
+ version: 3.5.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: capistrano-db-tasks
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0.3'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0.3'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: capistrano-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '1.1'
61
+ version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '1.1'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: capistrano-rvm
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: slackistrano
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 3.1.0.beta
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 3.1.0.beta
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rake
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -177,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
191
  version: '0'
178
192
  requirements: []
179
193
  rubyforge_project:
180
- rubygems_version: 2.4.5
194
+ rubygems_version: 2.4.8
181
195
  signing_key:
182
196
  specification_version: 4
183
197
  summary: Adds common use case tasks (import db, reload unicorn, send airbrake notice,