easy-deployment 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog for easy-deployment
2
2
 
3
+ ## 0.6.0 (2013-11-05)
4
+
5
+ Features:
6
+
7
+ * Clearer error message, by checking and raises an exception if you haven't added an ssh-key as an identity (`ssh-add -L`) since this is a pre-requisite for ssh-agent forwarding.
8
+ * Support for using nginx - intended to be along with a stand-alone ruby application server.
9
+
10
+ Bugfixes:
11
+
12
+ * Using builting `easy-reference` gem support now works with a custom bundler path if set.
13
+
3
14
  ## 0.5.3 (2013-09-05)
4
15
 
5
16
  Bugfixes:
data/README.md CHANGED
@@ -31,7 +31,7 @@ Replace any missing configuration lines, and don't forget to remove the TODO tex
31
31
 
32
32
  ## Integration
33
33
 
34
- ### Apache
34
+ ### Apache (via Passenger)
35
35
 
36
36
  Automatically setup an Apache V-Host, and reload apache2:
37
37
 
@@ -43,7 +43,7 @@ Add to deploy.rb
43
43
 
44
44
  require "easy/deployment/apache"
45
45
 
46
- Customise the vhost file within `config/deploy/<stage>/apache/<app>.conf`
46
+ Customise the vhost file within `config/deploy/<stage>/apache.conf`
47
47
  If necessary, you can set the path to the apache2ctl binary via:
48
48
 
49
49
  set :apachectl_bin, "/usr/sbin/apachectl"
@@ -56,6 +56,26 @@ This assumes your deploy user has access to run the apachectl command with sudo
56
56
 
57
57
  Read more about passenger configuration on our wiki at https://github.com/AbleTech/easy-deployment/wiki/Common-passenger-config
58
58
 
59
+ ### Nginx (for use with standalone ruby app server)
60
+
61
+ Add to deploy.rb
62
+
63
+ require "easy/deployment/nginx"
64
+
65
+ Customise the site configuration within `config/deploy/<stage>/nginx.conf`
66
+ Alter the paths used if required:
67
+
68
+ set :nginx_bin, "/etc/init.d/nginx" # This is the default, change if necessary
69
+ set :nginx_dir, "/etc/nginx" # This is the default, change if necessary
70
+
71
+ Like the apache integration, this requires sudo privileges to reload nginx:
72
+
73
+ This example shows setting a passwordless sudo for a single user `deploy` for a limited set of commands controlling nginx
74
+
75
+ # Example sudoers file entries to grant deploy user passwordless sudo privileges to only these commands
76
+ deploy ALL=(ALL) NOPASSWD:/etc/init.d/nginx reload
77
+ deploy ALL=(ALL) NOPASSWD:/etc/init.d/nginx configtest
78
+
59
79
  ### Logrotate
60
80
 
61
81
  Automatically configure logrotate for your application logfile:
@@ -1,5 +1,5 @@
1
1
  module Easy
2
2
  module Deployment
3
- VERSION = "0.5.3"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
@@ -61,6 +61,29 @@ Capistrano::Configuration.instance(:must_exist).load do
61
61
  puts "Skipping copying of config/deploy/#{stage}/database.yml as the file is not present"
62
62
  end
63
63
  end
64
+
65
+ desc "[internal] Check ssh-key is added. ssh key forwarding deployments will fail without it"
66
+ # To disable this check set the variable `set :ignore_ssh_keys, true`
67
+ task :preflight_environment_check do
68
+ if fetch(:disable_agent_check, false) || !ssh_options[:forward_agent]
69
+ return true # Don't run the check if not using ssh agent forwarding
70
+ end
71
+ keys, status = run_local("ssh-add -L")
72
+ if fetch(:ignore_ssh_keys, false) || status != 0 || !(any_keys_registered = keys.chomp.split("\n").select {|line| line =~ /^ssh\-/ }.size > 0)
73
+ cmd_to_run = case RUBY_PLATFORM
74
+ when /darwin/
75
+ "ssh-add -K"
76
+ else
77
+ "ssh-add"
78
+ end
79
+ Capistrano::CLI.ui.say("<%= color('Error, no ssh-keys registered to be forwarded', :red) %>")
80
+ Capistrano::CLI.ui.say("<%= color('Run the following command to register your ssh-key then try again:', :red) %> #{cmd_to_run}")
81
+ Capistrano::CLI.ui.say("If you do not use ssh-agent-forwarding, put `set :disable_agent_check, true` in deploy.rb to disable this check")
82
+ exit(1)
83
+ else
84
+ Capistrano::CLI.ui.say("<%= color('ssh-keys are good to go captain!', :cyan) %>") if ENV['DEBUG']
85
+ end
86
+ end
64
87
  end
65
88
 
66
89
  namespace :tail do
@@ -91,9 +114,15 @@ Capistrano::Configuration.instance(:must_exist).load do
91
114
  run %Q(printf "#{version_info}" > #{release_path}/version.txt)
92
115
  end
93
116
 
117
+ before "deploy:update", "deploy:preflight_environment_check"
94
118
  after "deploy:update", "tag_release"
95
119
  after "deploy:update", "annotate_release"
96
120
 
121
+ def run_local(cmd, verbose = false)
122
+ result = `#{cmd}`
123
+ puts(result) if verbose
124
+ return [result, $?.exitstatus]
125
+ end
97
126
 
98
127
  # Helper function to stream output colorized by host
99
128
  def stream_output_from_command(cmd, continuous = false)
@@ -11,7 +11,7 @@ Capistrano::Configuration.instance(:must_exist).load do
11
11
  else raise ArgumentError, "unknown migration target #{migrate_target.inspect}"
12
12
  end
13
13
 
14
- run "cd #{directory} && RAILS_ENV=#{rails_env} bundle exec rake reference:load"
14
+ run "cd #{directory} && RAILS_ENV=#{rails_env} #{fetch(:bundle_cmd, 'bundle')} exec rake reference:load"
15
15
  end
16
16
  end
17
17
 
@@ -0,0 +1,35 @@
1
+ # Define some defaults for Capistrano deploys.
2
+ # To load this Capistrano configuration, require 'easy/deployment/nginx' from deploy.rb
3
+
4
+ Capistrano::Configuration.instance(:must_exist).load do
5
+ def remote_file_exists?(full_path)
6
+ 'true' == capture("if [ -e #{full_path} ]; then echo 'true'; fi").strip
7
+ end
8
+
9
+ set :nginx_bin, "/etc/init.d/nginx"
10
+ set :nginx_dir, "/etc/nginx"
11
+
12
+ namespace :nginx do
13
+ desc "Configure this site, test the configuration & gracefully reload the Nginx configuration"
14
+ task :configure_and_reload, :roles => :web, :except => { :no_release => true } do
15
+ configure
16
+ configtest
17
+ reload
18
+ end
19
+
20
+ desc "Configure this site with config/deploy/nginx.conf)"
21
+ task :configure, :roles => :web, :except => { :no_release => true } do
22
+ run "cp -f #{current_path}/config/deploy/#{stage}/nginx.conf #{nginx_dir}/sites-available/#{application}"
23
+ run "ln -fs #{nginx_dir}/sites-available/#{application} #{nginx_dir}/sites-enabled/#{application}"
24
+ end
25
+
26
+ [:stop, :start, :restart, :reload, :configtest].each do |action|
27
+ desc "#{action.to_s.capitalize} Nginx"
28
+ task action, :roles => :web do
29
+ run "sudo #{nginx_bin} #{action.to_s}"
30
+ end
31
+ end
32
+ end
33
+
34
+ before 'deploy:start', 'nginx:configure_and_reload'
35
+ end
@@ -10,6 +10,7 @@ module Easy
10
10
  directory("stage", "config/deploy/#{name}")
11
11
  template("stage.rb.tt", "config/deploy/#{name}.rb")
12
12
  template("stage/apache.conf.tt", "config/deploy/#{name}/apache.conf")
13
+ template("stage/nginx.conf.tt", "config/deploy/#{name}/nginx.conf")
13
14
 
14
15
  # Ensure we have a config/environments/<env-name>.rb
15
16
  dest = "config/environments/#{name}.rb"
@@ -0,0 +1,28 @@
1
+ upstream <%= application_name %> {
2
+ server unix:///var/apps/<%= application_name %>/shared/sockets/<%= application_name %>.sock;
3
+ }
4
+
5
+ server {
6
+ listen 80;
7
+ server_name <%= name %>.<%= application_name %>.co.nz;
8
+ root /var/apps/<%= application_name %>/current/public;
9
+
10
+ location / {
11
+ proxy_pass http://<%= application_name %>; # match the name of upstream directive which is defined above
12
+ proxy_set_header Host $host;
13
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
14
+ }
15
+
16
+ location ~* ^/assets/ {
17
+ # Per RFC2616 - 1 year maximum expiry
18
+ expires 1y;
19
+ add_header Cache-Control public;
20
+
21
+ # Some browsers still send conditional-GET requests if there's a
22
+ # Last-Modified header or an ETag header even if they haven't
23
+ # reached the expiry date sent in the Expires header.
24
+ add_header Last-Modified "";
25
+ add_header ETag "";
26
+ break;
27
+ }
28
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy-deployment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-09-05 00:00:00.000000000 Z
15
+ date: 2013-11-05 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rails
@@ -104,6 +104,7 @@ files:
104
104
  - lib/easy/deployment/dbreference.rb
105
105
  - lib/easy/deployment/logrotate.rb
106
106
  - lib/easy/deployment/nfs.rb
107
+ - lib/easy/deployment/nginx.rb
107
108
  - lib/easy/deployment/niet.rb
108
109
  - lib/easy/deployment/performance.rb
109
110
  - lib/easy/deployment/whenever.rb
@@ -119,6 +120,7 @@ files:
119
120
  - lib/easy/generators/templates/stage.rb.tt
120
121
  - lib/easy/generators/templates/stage/apache.conf.tt
121
122
  - lib/easy/generators/templates/stage/logrotate.conf.tt
123
+ - lib/easy/generators/templates/stage/nginx.conf.tt
122
124
  - spec/easy_deployment_spec.rb
123
125
  - spec/spec_helper.rb
124
126
  homepage: https://github.com/AbleTech/easy-deployment