deploy_mate 0.17.4 → 0.17.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d916b27c3a82a7a0eb5b88799922b9a1002a10d0
4
- data.tar.gz: c9fe794d0f88c61cadad26af9df0537de27c61b4
3
+ metadata.gz: b32dbcc8129a7dec28bed595b73896b7d2640b3c
4
+ data.tar.gz: 6c01d173525aea2c48d9b688825c26a8628e4f4b
5
5
  SHA512:
6
- metadata.gz: d1e8a111283fec26db5098d33b62edf03c742b7548fd9fc0548aa5e2d1a0649504e296196fa5438a10373b31d42e9e6c4d65a3f2180e12c43d631ef75444ad57
7
- data.tar.gz: 66059fceb476788b5dd43267e09159a120c239264fab1e2b6b207710e970e0665e84db709f3ddc3c6b6395724727bced930c71bb0f6631d5f812478b47a477a6
6
+ metadata.gz: d2df75c00a46a75298cb3c03fb30433387ab7ffaea1c53c855f5eead2390ee0029f64b33ca3cfc67674dcb0dbd877319da6a719ed73e3e6515d86aea17f7a8da
7
+ data.tar.gz: 4b408d949d237aa3697d29c4c88aaec7d922795cf653a4da7a4c1dd588aef79807d5a3b10cba41ad6956ce444b474cc4b2b802ecc9096de74a41f111e0efe6e3
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.2.0
1
+ ruby-2.2.3
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  This little gem can be added to your ruby-projects in order to **set up a working ruby-server** and **deploy** to it.
6
6
 
7
- The resulting server will work with this setup:
7
+ The resulting server will work with this setup:
8
8
  - NGINX Webserver (http://nginx.org/)
9
9
  - Unicorn Rack App Server (http://unicorn.bogomips.org/)
10
10
  - Bluepill Process Monitoring (https://github.com/bluepill-rb/bluepill)
@@ -29,6 +29,7 @@ It uses the following Capistrano-roles to divide the installed components:
29
29
  - **cronjobs**: [OPTIONAL] For environments where `whenever` should manage/run cronjobs
30
30
 
31
31
  ## Changelog
32
+ * **2015-10-17**: Added support for puma as application server
32
33
  * **2015-10-12**: Support additional linked-directories
33
34
  * **2015-08-27**: Small fix for `nginx`-config regarding gzipping of svgs
34
35
  * **2015-08-14**: Important small fix for `nginx`-config regarding ssl
data/deploy-mate.gemspec CHANGED
@@ -1,12 +1,12 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "deploy_mate"
3
- s.version = "0.17.4"
3
+ s.version = "0.17.5"
4
4
 
5
- s.authors = ["Tim Adler"]
6
- s.date = %q{2015-06-23}
5
+ s.authors = ["Tim Adler", "Marcus Geißler"]
6
+ s.date = %q{2016-02-17}
7
7
  s.description = %q{This is how we deploy around here.}
8
8
  s.summary = s.description
9
- s.email = %q{tim.adler (at) hanseventures (dot) com}
9
+ s.email = %q{development (at) hanseventures (dot) com}
10
10
  s.license = "MIT"
11
11
 
12
12
  s.files = `git ls-files`.split("\n")
@@ -7,6 +7,25 @@ Bluepill.application("<%= fetch(:application) %>", :log_file => "#{shared_path}/
7
7
  app.uid = 'ubuntu'
8
8
  app.gid = 'www-data'
9
9
 
10
+ <% if fetch(:app_server) == "puma" %>
11
+ app.process("puma") do |process|
12
+ process.pid_file = "#{shared_path}/system/pids/puma.pid"
13
+ process.environment = { 'BUNDLE_GEMFILE' => "#{current_path}/Gemfile" }
14
+
15
+ process.start_command = "/home/ubuntu/.rvm/wrappers/default/bundle exec puma -C #{shared_path}/config/puma.rb #{current_path}/config.ru"
16
+ process.stop_command = "kill -QUIT {{PID}}"
17
+ process.restart_command = "kill -USR2 {{PID}}"
18
+
19
+ process.start_grace_time = 10.seconds
20
+ process.stop_grace_time = 10.seconds
21
+ process.restart_grace_time = 10.seconds
22
+
23
+ process.monitor_children do |child_process|
24
+ child_process.stop_command = "kill -9 {{PID}}"
25
+ child_process.checks :mem_usage, :every => 30.seconds, :below => 500.megabytes, :times => [3,4], :fires => :stop
26
+ end
27
+ end
28
+ <% else %>
10
29
  app.process("unicorn") do |process|
11
30
  process.pid_file = "#{shared_path}/system/pids/unicorn.pid"
12
31
  process.environment = { 'BUNDLE_GEMFILE' => "#{current_path}/Gemfile" }
@@ -24,6 +43,7 @@ Bluepill.application("<%= fetch(:application) %>", :log_file => "#{shared_path}/
24
43
  child_process.checks :mem_usage, :every => 30.seconds, :below => 500.megabytes, :times => [3,4], :fires => :stop
25
44
  end
26
45
  end
46
+ <% end %>
27
47
 
28
48
  <% if fetch(:sidekiq) %>
29
49
  app.process("sidekiq") do |process|
@@ -36,4 +56,4 @@ Bluepill.application("<%= fetch(:application) %>", :log_file => "#{shared_path}/
36
56
  end
37
57
  <% end %>
38
58
 
39
- end
59
+ end
@@ -17,6 +17,6 @@
17
17
  [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
18
18
  endscript
19
19
  lastaction
20
- [ ! -f <%= shared_path %>/system/pids/unicorn.pid ] || kill -USR1 `cat <%= shared_path %>/system/pids/unicorn.pid`
20
+ [ ! -f <%= shared_path %>/system/pids/<%= fetch(:app_server) %>.pid ] || kill -USR1 `cat <%= shared_path %>/system/pids/<%= fetch(:app_server) %>.pid`
21
21
  endscript
22
- }
22
+ }
@@ -1,5 +1,5 @@
1
- upstream unicorn_upstream {
2
- server unix:<%= shared_path %>/system/sockets/unicorn.sock;
1
+ upstream appserver_upstream {
2
+ server unix:<%= shared_path %>/system/sockets/<%= fetch(:app_server) %>.sock;
3
3
  }
4
4
 
5
5
  server {
@@ -21,7 +21,7 @@ server {
21
21
  proxy_set_header Host $http_host;
22
22
  proxy_redirect off;
23
23
 
24
- proxy_pass http://unicorn_upstream;
24
+ proxy_pass http://appserver_upstream;
25
25
  break;
26
26
  }
27
27
 
@@ -0,0 +1,55 @@
1
+ # puma configuration
2
+
3
+ shared_path = "<%= shared_path %>"
4
+
5
+ # Puma can serve each request in a thread from an internal thread pool.
6
+ # The `threads` method setting takes two numbers a minimum and maximum.
7
+ # Any libraries that use thread pools should be configured to match
8
+ # the maximum value specified for Puma. Default is set to 5 threads for minimum
9
+ # and maximum, this matches the default thread size of Active Record.
10
+ #
11
+ threads_count = <%= fetch(:puma_threads) %>
12
+ threads threads_count, threads_count
13
+
14
+ # Specifies the `environment` that Puma will run in.
15
+ #
16
+ environment "<%= fetch(:environment) %>"
17
+
18
+ # Specifies the number of `workers` to boot in clustered mode.
19
+ # Workers are forked webserver processes. If using threads and workers together
20
+ # the concurrency of the application would be max `threads` * `workers`.
21
+ # Workers do not work on JRuby or Windows (both of which do not support
22
+ # processes).
23
+ #
24
+ workers <%= fetch(:puma_workers) %>
25
+
26
+ # Use the `preload_app!` method when specifying a `workers` number.
27
+ # This directive tells Puma to first boot the application and load code
28
+ # before forking the application. This takes advantage of Copy On Write
29
+ # process behavior so workers use less memory. If you use this option
30
+ # you need to make sure to reconnect any threads in the `on_worker_boot`
31
+ # block.
32
+ #
33
+ preload_app!
34
+
35
+ # The code in the `on_worker_boot` will be called if you are using
36
+ # clustered mode by specifying a number of `workers`. After each worker
37
+ # process is booted this block will be run, if you are using `preload_app!`
38
+ # option you will want to use this block to reconnect to any threads
39
+ # or connections that may have been created at application boot, Ruby
40
+ # cannot share connections between processes.
41
+ #
42
+ on_worker_boot do
43
+ ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
44
+ end
45
+
46
+ # Set up socket location
47
+ bind "unix://#{shared_path}/system/sockets/puma.sock"
48
+
49
+ # Logging
50
+ stdout_redirect "#{shared_path}/log/puma.stdout.log", "#{shared_path}/log/puma.stderr.log", true
51
+
52
+ # Set master PID and state locations
53
+ pidfile "#{shared_path}/system/pids/puma.pid"
54
+ state_path "#{shared_path}/system/pids/puma.state"
55
+ activate_control_app
@@ -28,6 +28,6 @@ require "capistrano/helpers.rb"
28
28
  end
29
29
 
30
30
  # Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
31
- %w(bluepill logrotate machine elasticsearch nginx rvm unicorn upstart).each do |t|
31
+ %w(bluepill logrotate machine elasticsearch nginx rvm unicorn puma upstart).each do |t|
32
32
  import File.expand_path("../tasks/#{t}.rake", __FILE__)
33
33
  end
@@ -19,6 +19,9 @@ set :bundle_flags, "--deployment"
19
19
  set :bundle_without, %w{development test}.join(' ')
20
20
  set :bundle_exec, "bundle exec"
21
21
 
22
+ # app server
23
+ set :app_server, "unicorn" # default to unicorn if nothing set
24
+
22
25
  namespace :deploy do
23
26
  desc 'Restart application'
24
27
  task :restart do
@@ -15,7 +15,7 @@ namespace :bluepill do
15
15
  end
16
16
  end
17
17
 
18
- desc "Stops unicorn"
18
+ desc "Stops app server"
19
19
  task :stop do
20
20
  on roles(:app) do
21
21
  sudo "stop bluepill"
@@ -26,7 +26,7 @@ namespace :bluepill do
26
26
  task :restart do
27
27
  on roles(:app) do
28
28
  if bluepill_running?
29
- if pill_running?(:unicorn)
29
+ if pill_running?(fetch(:app_server))
30
30
  execute :rvmsudo, :bluepill, fetch(:application), :restart
31
31
  else
32
32
  execute :rvmsudo, :bluepill, fetch(:application), :start
@@ -39,4 +39,3 @@ namespace :bluepill do
39
39
  end
40
40
  before :restart, 'rvm:hook'
41
41
  end
42
-
@@ -49,7 +49,8 @@ namespace :machine do
49
49
  desc "Install configs"
50
50
  task :setup do
51
51
  invoke "nginx:setup"
52
- invoke "unicorn:setup"
52
+ invoke "unicorn:setup" if fetch(:app_server) == "unicorn"
53
+ invoke "puma:setup" if fetch(:app_server) == "puma"
53
54
  invoke "upstart:setup"
54
55
  invoke "logrotate:setup"
55
56
  invoke "bluepill:setup"
@@ -0,0 +1,17 @@
1
+ set_default(:puma_workers, "5")
2
+ set_default(:puma_threads, "10")
3
+ set_default(:puma_timeout, "30")
4
+ set_default(:puma_worker_grace_time, "60")
5
+
6
+ namespace :puma do
7
+ include Bluepill
8
+
9
+ desc "Installs the puma config"
10
+ task :setup do
11
+ on roles(:app) do
12
+ execute "mkdir -p #{shared_path}/config"
13
+ template "puma.rb.erb", "#{shared_path}/config/puma.rb"
14
+ end
15
+ end
16
+
17
+ end
@@ -7,19 +7,20 @@ namespace :deploy_mate do
7
7
  puts "I'm your DEPLOY_MATE."
8
8
  puts "We will setting up your deployment now."
9
9
 
10
- @app_name = ask("[01/13] App-Name (for nginx, servers, etc.)", guess_app_name)
11
- @stage_name = ask("[02/13] Give the first stage a name", "prestage")
12
- @ssh_name = ask("[03/13] SSH-Hostname for the server", "#{@app_name}-#{@stage_name}")
13
- @ruby_version = ask("[04/13] Ruby-Version (the RVM-way, e.g. ruby-2.2.0)", guess_ruby_version)
14
- @db_engine = ask_until("[05/13] What db are you using?", %w( postgresql mysql ), "mysql")
15
- @repo_url = ask("[06/13] Url-Location of git-repo", "git@github.com:hanseventures/#{@app_name}.git")
16
- @is_rails = yes_or_no?("[07/13] Is this a RAILS project ?", (rails_present? ? "yes" : "no"))
17
- @needs_imagemagick = yes_or_no?("[08/13] Does this project need ImageMagick ?", (needs_imagemagick? ? "yes" : "no"))
18
- @uses_sidekiq = yes_or_no?("[09/13] Does this project use Sidekiq ?", (uses_sidekiq? ? "yes" : "no"))
19
- @branch_name = ask("[10/13] Branch to deploy '#{@stage_name}' from", "dev")
20
- @host_name = ask("[11/13] Web-URL for '#{@stage_name}'", "#{@stage_name}.#{@app_name}")
21
- @environment = ask("[12/13] #{@stage_name}'s environment (RACK_ENV/RAILS_ENV)", "#{@stage_name}")
22
- @needs_elasticsearch = yes_or_no?("[13/13] Do you need ElasticSearch on this machine ?", "no")
10
+ @app_name = ask("[01/14] App-Name (for nginx, servers, etc.)", guess_app_name)
11
+ @stage_name = ask("[02/14] Give the first stage a name", "prestage")
12
+ @ssh_name = ask("[03/14] SSH-Hostname for the server", "#{@app_name}-#{@stage_name}")
13
+ @ruby_version = ask("[04/14] Ruby-Version (the RVM-way, e.g. ruby-2.2.0)", guess_ruby_version)
14
+ @db_engine = ask_until("[05/14] What db are you using?", %w( postgresql mysql ), "mysql")
15
+ @app_server = ask_until("[06/14] What app server do you want to use?", %w( unicorn puma ), "unicorn")
16
+ @repo_url = ask("[07/14] Url-Location of git-repo", "git@github.com:hanseventures/#{@app_name}.git")
17
+ @is_rails = yes_or_no?("[08/14] Is this a RAILS project ?", (rails_present? ? "yes" : "no"))
18
+ @needs_imagemagick = yes_or_no?("[09/14] Does this project need ImageMagick ?", (needs_imagemagick? ? "yes" : "no"))
19
+ @uses_sidekiq = yes_or_no?("[10/14] Does this project use Sidekiq ?", (uses_sidekiq? ? "yes" : "no"))
20
+ @branch_name = ask("[11/14] Branch to deploy '#{@stage_name}' from", "dev")
21
+ @host_name = ask("[12/14] Web-URL for '#{@stage_name}'", "#{@stage_name}.#{@app_name}")
22
+ @environment = ask("[13/14] #{@stage_name}'s environment (RACK_ENV/RAILS_ENV)", "#{@stage_name}")
23
+ @needs_elasticsearch = yes_or_no?("[14/14] Do you need ElasticSearch on this machine ?", "no")
23
24
 
24
25
  puts "Aye!"
25
26
  puts "Worrrrking..."
@@ -106,4 +107,4 @@ end
106
107
 
107
108
  def cat_file(filename)
108
109
  File.open(filename, 'rb') { |f| f.read } if File.exist?(filename)
109
- end
110
+ end
@@ -1,4 +1,4 @@
1
- server "<%= @ssh_name %>", roles: [:app, :web<% if @needs_elasticsearch %>, :search<%end %>], :primary => true
1
+ server "<%= @ssh_name %>", roles: [:app, :db, :web<% if @needs_elasticsearch %>, :search<% end %>], :primary => true
2
2
 
3
3
  set :unicorn_workers, "2"
4
4
  set :nginx_server_name, "<%= @host_name %>"
@@ -10,6 +10,7 @@ set :stages, %w(<%= @stage_name %>)
10
10
  set :default_stage, '<%= @stage_name %>'
11
11
  set :repo_url, '<%= @repo_url %>'
12
12
  set :db_engine, '<%= @db_engine %>'
13
+ set :app_server, '<%= @app_server %>'
13
14
 
14
15
  set :imagemagick, <%= @needs_imagemagick %>
15
16
  set :sidekiq, <%= @uses_sidekiq %>
@@ -20,4 +21,4 @@ set :sidekiq, <%= @uses_sidekiq %>
20
21
  # set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
21
22
  # set :whenever_environment, fetch(:stage)
22
23
  # set :whenever_roles, [:cronjobs]
23
- # before "whenever:update_crontab", 'rvm:hook'
24
+ # before "whenever:update_crontab", 'rvm:hook'
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deploy_mate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.4
4
+ version: 0.17.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Adler
8
+ - Marcus Geißler
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-06-23 00:00:00.000000000 Z
12
+ date: 2016-02-17 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: capistrano
@@ -67,7 +68,7 @@ dependencies:
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
69
70
  description: This is how we deploy around here.
70
- email: tim.adler (at) hanseventures (dot) com
71
+ email: development (at) hanseventures (dot) com
71
72
  executables: []
72
73
  extensions: []
73
74
  extra_rdoc_files: []
@@ -86,6 +87,7 @@ files:
86
87
  - lib/capistrano/configs/logrotate.erb
87
88
  - lib/capistrano/configs/nginx_app.conf.erb
88
89
  - lib/capistrano/configs/nginx_base.conf.erb
90
+ - lib/capistrano/configs/puma.rb.erb
89
91
  - lib/capistrano/configs/unicorn.rb.erb
90
92
  - lib/capistrano/configs/upstart.conf.erb
91
93
  - lib/capistrano/deploy_mate_capfile.rb
@@ -104,6 +106,7 @@ files:
104
106
  - lib/capistrano/tasks/logrotate.rake
105
107
  - lib/capistrano/tasks/machine.rake
106
108
  - lib/capistrano/tasks/nginx.rake
109
+ - lib/capistrano/tasks/puma.rake
107
110
  - lib/capistrano/tasks/rvm.rake
108
111
  - lib/capistrano/tasks/seeds.rake
109
112
  - lib/capistrano/tasks/unicorn.rake
@@ -132,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
135
  version: '0'
133
136
  requirements: []
134
137
  rubyforge_project:
135
- rubygems_version: 2.4.6
138
+ rubygems_version: 2.4.5.1
136
139
  signing_key:
137
140
  specification_version: 4
138
141
  summary: This is how we deploy around here.