j-cap-recipes 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b82b43c06483b389c1bf2dcde05f074ce223283d
4
+ data.tar.gz: d1b2ed07ce382788f30576da2a7ff9ab82490018
5
+ SHA512:
6
+ metadata.gz: 46891dd595e3a9e03345051290a2d3d951f16ef729e20715b06646349b5e97df1c124962f8628b4001cec8bcb81ecceca5ca73b1b085a6f087ee679cbe45da29
7
+ data.tar.gz: 8b8c43da7b32fe0ad16f2f9373a9363067c891029f6ca5a6b70e70d82d7d0d7e790674811cccae3339164213b449d79249e2bad8790227efdaa5f73c7bc96267
data/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  This file is written in reverse chronological order, newer releases will
4
4
  appear at the top.
5
5
 
6
+ ## 0.0.7
7
+
8
+ * monkey patch SSHKit because capistrano wont to use blocks for execute.
9
+
10
+ ## 0.0.6
11
+
12
+ * Added deploy notifiction of the Honeybadger service.
13
+
6
14
  ## 0.0.5
7
15
 
8
16
  * fixed bug: Removed the custom command bin mapping for rails. Updated the rails console behavior.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- j-cap-recipes (0.0.5)
4
+ j-cap-recipes (0.0.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -34,6 +34,7 @@ If you want to load only specified recipe:
34
34
  require 'j-cap-recipes/log'
35
35
  require 'j-cap-recipes/rails'
36
36
  require 'j-cap-recipes/unicorn'
37
+ require 'j-cap-recipes/honeybadger'
37
38
 
38
39
  ### Nginx
39
40
  ### Setup
@@ -44,6 +45,10 @@ If you want to load only specified recipe:
44
45
  To run remote rails console you should update to the latest gems `capistrano-rbenv` and `capistrano-bundler`
45
46
  and run command `cap production rails:console`.
46
47
 
48
+ ### Honeybadger
49
+
50
+ `honeybadger:deploy` - notify the service about deploy and it would be invoked after `deploy:migrate`
51
+
47
52
  ## Contributing
48
53
 
49
54
  1. Fork it
@@ -0,0 +1 @@
1
+ load File.expand_path('../tasks/honeybadger.rake', __FILE__)
@@ -1 +1,66 @@
1
+ module SSHKit
2
+ module Backend
3
+ class Netssh
4
+ def execute(*args, &block)
5
+ _execute(*args, &block).success?
6
+ end
7
+
8
+ private
9
+ def _execute(*args, &block)
10
+ command(*args).tap do |cmd|
11
+ output << cmd
12
+ cmd.started = true
13
+ ssh.open_channel do |chan|
14
+ chan.request_pty if Netssh.config.pty
15
+ chan.exec cmd.to_command do |ch, success|
16
+ chan.on_data do |ch, data|
17
+ if block_given?
18
+ block.call(ch, data)
19
+ else
20
+ cmd.stdout = data
21
+ cmd.full_stdout += data
22
+ output << cmd
23
+ end
24
+ end
25
+ chan.on_extended_data do |ch, type, data|
26
+ cmd.stderr = data
27
+ cmd.full_stderr += data
28
+ output << cmd
29
+ end
30
+ chan.on_request("exit-status") do |ch, data|
31
+ cmd.stdout = ''
32
+ cmd.stderr = ''
33
+ cmd.exit_status = data.read_long
34
+ output << cmd
35
+ end
36
+ #chan.on_request("exit-signal") do |ch, data|
37
+ # # TODO: This gets called if the program is killed by a signal
38
+ # # might also be a worthwhile thing to report
39
+ # exit_signal = data.read_string.to_i
40
+ # warn ">>> " + exit_signal.inspect
41
+ # output << cmd
42
+ #end
43
+ chan.on_open_failed do |ch|
44
+ # TODO: What do do here?
45
+ # I think we should raise something
46
+ end
47
+ chan.on_process do |ch|
48
+ # TODO: I don't know if this is useful
49
+ end
50
+ chan.on_eof do |ch|
51
+ # TODO: chan sends EOF before the exit status has been
52
+ # writtend
53
+ end
54
+ end
55
+ chan.wait
56
+ end
57
+ ssh.loop
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+
1
66
  load File.expand_path("../tasks/rails.rake", __FILE__)
@@ -0,0 +1,38 @@
1
+ after 'deploy', 'honeybadger:deploy'
2
+ after 'deploy:migrate', 'honeybadger:deploy'
3
+
4
+ namespace :honeybadger do
5
+ desc <<-DESC
6
+ Notify Honeybadger of the deployment by running the notification on the REMOTE machine.
7
+ - Run remotely so we use remote API keys, environment, etc.
8
+ DESC
9
+ task :deploy do
10
+ on roles(:app), reject: lambda { |h| h.properties.no_release } do
11
+ dry_run = fetch(:dry_run)
12
+ honeybadger_env = fetch(:honeybadger_env, fetch(:rails_env, 'production'))
13
+ user = local_user || ENV['USER'] || ENV['USERNAME']
14
+ async_notify = fetch(:honeybadger_async_notify, false)
15
+
16
+ rake_task_args = "TO=#{honeybadger_env} REPO=#{repo_url} USER=#{user}"
17
+ rake_task_args << " #{ENV['API_KEY']}" if ENV['API_KEY']
18
+ rake_task_args << ' DRY_RUN=true' if dry_run
19
+
20
+ if async_notify
21
+ rake_task_args << ' nohup'
22
+ rake_task_args << ' >> /dev/null 2>&1 &'
23
+ end
24
+
25
+ if dry_run
26
+ info 'DRY RUN: Notification not actually run.'
27
+ else
28
+ within fetch(:release_path) do
29
+ with(rails_env: fetch(:rails_env)) do
30
+ execute :rake, fetch(:honeybadger_deploy_task, 'honeybadger:deploy'), rake_task_args
31
+ end
32
+ end
33
+ end
34
+
35
+ info 'Honeybadger Notification Complete.'
36
+ end
37
+ end
38
+ end
@@ -4,79 +4,20 @@ namespace :rails do
4
4
  on roles(:app) do
5
5
  within release_path do
6
6
  with rails_env: fetch(:rails_env) do
7
- _execute_interactive(:rails, :console)
8
- end
9
- end
10
- end
11
- end
12
- end
13
-
14
-
15
- module SSHKit
16
- module Backend
17
- class Netssh
18
- def _execute_interactive(*args)
19
- command(*args).tap do |cmd|
20
- output << cmd
21
- cmd.started = true
22
- ssh.open_channel do |chan|
23
- chan.request_pty if Netssh.config.pty
24
- chan.exec cmd.to_command do |ch, success|
25
-
26
- chan.on_data do |ch, data|
27
- #Rails specific console handler
28
- @row ||= ''
29
- @row += data
30
- if data.include?("\n")
31
- cmd.stdout = @row
32
- cmd.full_stdout += @row
33
- output << cmd
34
- @row = ''
35
- else
36
- if data.include?('irb(main):')
37
- print data
38
- @row = ''
39
- command = $stdin.gets
40
- command = "exit\n" if command == nil
41
- ch.send_data command
42
- end
43
- end
44
- end
45
-
46
- chan.on_extended_data do |ch, type, data|
47
- cmd.stderr = data
48
- cmd.full_stderr += data
49
- output << cmd
50
- end
51
-
52
- chan.on_request("exit-status") do |ch, data|
53
- cmd.stdout = ''
54
- cmd.stderr = ''
55
- cmd.exit_status = data.read_long
56
- output << cmd
57
- end
58
- #chan.on_request("exit-signal") do |ch, data|
59
- # # TODO: This gets called if the program is killed by a signal
60
- # # might also be a worthwhile thing to report
61
- # exit_signal = data.read_string.to_i
62
- # warn ">>> " + exit_signal.inspect
63
- # output << cmd
64
- #end
65
- chan.on_open_failed do |ch|
66
- # TODO: What do do here?
67
- # I think we should raise something
68
- end
69
- chan.on_process do |ch|
70
- # TODO: I don't know if this is useful
71
- end
72
- chan.on_eof do |ch|
73
- # TODO: chan sends EOF before the exit status has been
74
- # writtend
75
- end
7
+ row , command = '', ''
8
+ execute(:rails, :console) do |ch, data|
9
+ row += data
10
+ if data.include?("\n")
11
+ print row if command.chomp != row.chomp
12
+ row = ''
13
+ elsif data.include?('irb(main):')
14
+ print row
15
+ row = ''
16
+ command = $stdin.gets
17
+ command = "exit\n" if command == nil
18
+ ch.send_data command
76
19
  end
77
- chan.wait
78
20
  end
79
- ssh.loop
80
21
  end
81
22
  end
82
23
  end
@@ -1,5 +1,5 @@
1
1
  module JCap
2
2
  module Recipes
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.7"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,62 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: j-cap-recipes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 0.0.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Nikitochkin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-29 00:00:00.000000000 Z
11
+ date: 2013-12-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.3'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.3'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: capistrano
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: 3.0.0
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: 3.0.0
62
55
  description: A litle knife to deploy Rails application
@@ -77,6 +70,7 @@ files:
77
70
  - lib/j-cap-recipes/check.rb
78
71
  - lib/j-cap-recipes/database.rb
79
72
  - lib/j-cap-recipes/delayed_job.rb
73
+ - lib/j-cap-recipes/honeybadger.rb
80
74
  - lib/j-cap-recipes/hpusher.rb
81
75
  - lib/j-cap-recipes/log.rb
82
76
  - lib/j-cap-recipes/monit.rb
@@ -87,6 +81,7 @@ files:
87
81
  - lib/j-cap-recipes/tasks/check.rake
88
82
  - lib/j-cap-recipes/tasks/database.rake
89
83
  - lib/j-cap-recipes/tasks/delayed_job.rake
84
+ - lib/j-cap-recipes/tasks/honeybadger.rake
90
85
  - lib/j-cap-recipes/tasks/hpusher.rake
91
86
  - lib/j-cap-recipes/tasks/log.rake
92
87
  - lib/j-cap-recipes/tasks/monit.rake
@@ -95,39 +90,31 @@ files:
95
90
  - lib/j-cap-recipes/tasks/rake.rake
96
91
  - lib/j-cap-recipes/tasks/setup.rake
97
92
  - lib/j-cap-recipes/tasks/templates/database.yml.erb
98
- - lib/j-cap-recipes/tasks/templates/nginx/site.conf.erb
99
93
  - lib/j-cap-recipes/tasks/unicorn.rake
100
94
  - lib/j-cap-recipes/unicorn.rb
101
95
  - lib/j-cap-recipes/version.rb
102
96
  homepage: https://github.com/jetthoughts/j-cap-recipes
103
97
  licenses:
104
98
  - MIT
99
+ metadata: {}
105
100
  post_install_message:
106
101
  rdoc_options: []
107
102
  require_paths:
108
103
  - lib
109
104
  required_ruby_version: !ruby/object:Gem::Requirement
110
- none: false
111
105
  requirements:
112
- - - ! '>='
106
+ - - ">="
113
107
  - !ruby/object:Gem::Version
114
108
  version: '0'
115
- segments:
116
- - 0
117
- hash: -3379381580228172657
118
109
  required_rubygems_version: !ruby/object:Gem::Requirement
119
- none: false
120
110
  requirements:
121
- - - ! '>='
111
+ - - ">="
122
112
  - !ruby/object:Gem::Version
123
113
  version: '0'
124
- segments:
125
- - 0
126
- hash: -3379381580228172657
127
114
  requirements: []
128
115
  rubyforge_project:
129
- rubygems_version: 1.8.25
116
+ rubygems_version: 2.1.11
130
117
  signing_key:
131
- specification_version: 3
118
+ specification_version: 4
132
119
  summary: Capistrano 3 recipes for nginx, monit, rails log, setup, unicorn
133
120
  test_files: []
@@ -1,28 +0,0 @@
1
- upstream <%= fetch(:application) %>_upstream {
2
- server unix:<%= shared_path.join('tmp/sockets/unicorn.sock') %> fail_timeout=0;
3
- }
4
-
5
- server {
6
- listen 80;
7
- server_name <%= fetch(:application) %>;
8
-
9
- error_log <%= shared_path.join('log/nginx-error.log') %>;
10
- access_log <%= shared_path.join('log/nginx-access.log') %>;
11
-
12
- root <%= current_path.join('public') %>;
13
-
14
- try_files $uri/index.html $uri.html $uri @app;
15
-
16
- location @app {
17
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
18
- proxy_set_header Host $http_host;
19
- proxy_redirect off;
20
-
21
- proxy_pass http://<%= fetch(:application) %>_upstream;
22
- }
23
-
24
- error_page 500 502 503 504 /500.html;
25
- location = /500.html {
26
- root <%= current_path.join('public') %>;
27
- }
28
- }