capistrano-exts 1.0.0 → 1.0.1

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.
Files changed (33) hide show
  1. data/.travis.yml +7 -0
  2. data/Gemfile +1 -1
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +72 -0
  5. data/capistrano-exts.gemspec +8 -4
  6. data/examples/php_fpm/deploy/development.rb +2 -2
  7. data/examples/php_fpm/deploy/production.rb +2 -2
  8. data/examples/php_fpm/deploy/staging.rb +2 -2
  9. data/examples/php_fpm/deploy.rb +1 -1
  10. data/examples/rails_passenger/deploy/development.rb +3 -3
  11. data/examples/rails_passenger/deploy/production.rb +3 -3
  12. data/examples/rails_passenger/deploy/staging.rb +3 -3
  13. data/examples/rails_passenger/deploy.rb +1 -1
  14. data/examples/rails_reverse_proxy/deploy/development.rb +2 -2
  15. data/examples/rails_reverse_proxy/deploy/production.rb +2 -2
  16. data/examples/rails_reverse_proxy/deploy/staging.rb +2 -2
  17. data/examples/rails_reverse_proxy/deploy.rb +1 -1
  18. data/lib/capistrano-exts/receipts/contao.rb +2 -9
  19. data/lib/capistrano-exts/receipts/{base.rb → deploy.rb} +14 -0
  20. data/lib/capistrano-exts/receipts/git.rb +1 -1
  21. data/lib/capistrano-exts/receipts/mysql.rb +1 -1
  22. data/lib/capistrano-exts/receipts/rails.rb +9 -12
  23. data/lib/capistrano-exts/receipts/servers/web_server/apache.rb +2 -2
  24. data/lib/capistrano-exts/receipts/servers/web_server/nginx.rb +2 -2
  25. data/lib/capistrano-exts/receipts/servers.rb +1 -1
  26. data/lib/capistrano-exts/servers/web_server/nginx.rb +1 -1
  27. data/lib/capistrano-exts/servers/web_server.rb +26 -2
  28. data/lib/capistrano-exts/templates/multistage.rb +6 -2
  29. data/lib/capistrano-exts/templates/web_servers/nginx.conf.erb +1 -1
  30. data/lib/capistrano-exts/version.rb +1 -1
  31. data/spec/requests/nginx_spec.rb +1 -1
  32. data/spec/servers/web_server/nginx_spec.rb +98 -21
  33. metadata +41 -51
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ script: "rake spec"
2
+ rvm:
3
+ - 1.9.2
4
+ # - jruby
5
+ notifications:
6
+ recipients:
7
+ - wael.nasreddine@gmail.com
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in capistrano-exts.gemspec
4
- gemspec
4
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Wael Nasreddine <wael.nasreddine@gmail.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,72 @@
1
+ Capistrano Extensions [![Build Status](http://travis-ci.org/TechnoGate/capistrano-exts.png)](http://travis-ci.org/TechnoGate/capistrano-exts)
2
+ =====
3
+ This gem provides some useful capistrano tasks, for preparing the server,
4
+ the database and the application without ever SSH'ing to the destination server,
5
+ it also provides multistage functionality just like [capistano-ext](https://github.com/capistrano/capistrano-ext)
6
+ gem, in fact the included multistage file is a modified version of capistrano-ext
7
+
8
+ Installation
9
+ ------------
10
+
11
+ Install the gem
12
+
13
+ ```ruby
14
+ gem install capistrano-ext
15
+ ```
16
+
17
+ or add it to your Gemfile
18
+
19
+ ```ruby
20
+ gem 'capistrano-ext', '>=1.0.0'
21
+ ```
22
+
23
+ Setup
24
+ -----
25
+ First make sure you have capified your project, if not then run the following command on the root of your project:
26
+
27
+ ```bash
28
+ $ capify .
29
+ ```
30
+
31
+ Then open up __config/deploy.rb__ and add the following to the top of the file
32
+
33
+ ```ruby
34
+ # Stages
35
+ # Stages can be really anything you want
36
+ set :stages, [:development, :staging, :production]
37
+ set :default_stage, :development
38
+
39
+ # Capistrano extensions
40
+ # Valid extensions: :multistage, :git, :deploy, :mysql, :rails, :contao, :god, :unicorn, :servers
41
+ set :capistrano_extensions, [:multistage, :git, :deploy, :mysql, :rails, :servers]
42
+ ```
43
+
44
+ Then run the command
45
+
46
+ ```bash
47
+ $ cap multistage:prepare
48
+ ```
49
+
50
+ Then edit the files found at __config/deploy/*.rb__, that's it you're ready..
51
+
52
+ Usage
53
+ -----
54
+
55
+ The server can be prepared by running:
56
+
57
+ ```bash
58
+ $ cap deploy:server:prepare deploy:setup
59
+ ```
60
+
61
+ Deploy with
62
+
63
+ ```bash
64
+ $ cap deploy
65
+ ```
66
+
67
+ That's pretty much it
68
+
69
+
70
+ License
71
+ -------
72
+ This code is free to use under the terms of the MIT license.
@@ -24,12 +24,16 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency('activesupport', '>=3.1.0')
25
25
 
26
26
  # Development dependencies
27
+ s.add_development_dependency('guard', '>=0.6.2')
28
+ s.add_development_dependency('guard-bundler', '>=0.1.3')
29
+ s.add_development_dependency('guard-rspec', '>=0.4.3')
30
+
31
+ # Install this gem manually to get growl notifications on Mac OS X
32
+ # s.add_development_dependency('growl_notify', '0.0.1')
33
+
34
+ # Development / Test dependencies
27
35
  s.add_development_dependency('rspec', '>=2.6.0')
28
36
  s.add_development_dependency('mocha', '>=0.2.12')
29
37
  s.add_development_dependency('factory_girl', '>=2.0.5')
30
38
  s.add_development_dependency('faker19', '>=1.0.5')
31
- s.add_development_dependency('guard', '>=0.6.2')
32
- s.add_development_dependency('guard-bundler', '>=0.1.3')
33
- s.add_development_dependency('guard-rspec', '>=0.4.3')
34
- s.add_development_dependency('growl_notify', '0.0.1')
35
39
  end
@@ -92,9 +92,9 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
@@ -92,9 +92,9 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
@@ -92,9 +92,9 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
@@ -15,7 +15,7 @@ set :stages, [:development, :staging, :production]
15
15
  set :default_stage, :development
16
16
 
17
17
  # Capistrano extensions
18
- set :capistrano_extensions, [:multistage, :git, :base, :mysql, :contao, :servers]
18
+ set :capistrano_extensions, [:multistage, :git, :deploy, :mysql, :contao, :servers]
19
19
 
20
20
  default_run_options[:pty] = true
21
21
  ssh_options[:forward_agent] = true
@@ -92,14 +92,14 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
101
101
  # =>
102
- set :web_server_mode, :rails_passenger
102
+ set :web_server_mode, :passenger
103
103
 
104
104
  # Server mode specific configurations
105
105
  # Uncomment and edit the one depending on the enabled mode
@@ -92,14 +92,14 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
101
101
  # =>
102
- set :web_server_mode, :rails_passenger
102
+ set :web_server_mode, :passenger
103
103
 
104
104
  # Server mode specific configurations
105
105
  # Uncomment and edit the one depending on the enabled mode
@@ -92,14 +92,14 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
101
101
  # =>
102
- set :web_server_mode, :rails_passenger
102
+ set :web_server_mode, :passenger
103
103
 
104
104
  # Server mode specific configurations
105
105
  # Uncomment and edit the one depending on the enabled mode
@@ -15,7 +15,7 @@ set :stages, [:development, :staging, :production]
15
15
  set :default_stage, :development
16
16
 
17
17
  # Capistrano extensions
18
- set :capistrano_extensions, [:multistage, :git, :base, :mysql, :contao, :servers]
18
+ set :capistrano_extensions, [:multistage, :git, :deploy, :mysql, :rails, :servers]
19
19
 
20
20
  default_run_options[:pty] = true
21
21
  ssh_options[:forward_agent] = true
@@ -92,9 +92,9 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
@@ -92,9 +92,9 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
@@ -92,9 +92,9 @@ set :web_server_mod_rewrite, true
92
92
  # Valid options:
93
93
  #
94
94
  # For Nginx:
95
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
95
+ # => :rails_reverse_proxy, :passenger, :php_fpm
96
96
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
97
- # => :rails_passenger runs rails apps
97
+ # => :passenger runs rails apps
98
98
  # => :php_fpm is used to deliver websites written using PHP
99
99
  #
100
100
  # For Apache
@@ -15,7 +15,7 @@ set :stages, [:development, :staging, :production]
15
15
  set :default_stage, :development
16
16
 
17
17
  # Capistrano extensions
18
- set :capistrano_extensions, [:multistage, :git, :base, :mysql, :contao, :servers]
18
+ set :capistrano_extensions, [:multistage, :git, :deploy, :mysql, :rails, :servers]
19
19
 
20
20
  default_run_options[:pty] = true
21
21
  ssh_options[:forward_agent] = true
@@ -1,5 +1,5 @@
1
1
  require 'capistrano'
2
- require 'capistrano-exts/receipts/base'
2
+ require 'capistrano-exts/receipts/deploy'
3
3
  require 'capistrano-exts/receipts/mysql'
4
4
 
5
5
  # Verify that Capistrano is version 2
@@ -58,13 +58,6 @@ Capistrano::Configuration.instance(:must_exist).load do
58
58
  #{try_sudo} ln -nsf #{fetch :shared_path}/log #{fetch :latest_release}/log
59
59
  CMD
60
60
  end
61
-
62
- task :fix_permissions, :roles => :app, :except => { :no_release => true } do
63
- run <<-CMD
64
- #{try_sudo} chown -R www-data:www-data #{deploy_to} &&
65
- #{try_sudo} chmod -R g+w #{latest_release}
66
- CMD
67
- end
68
61
  end
69
62
 
70
63
  # Dependencies
@@ -73,7 +66,7 @@ Capistrano::Configuration.instance(:must_exist).load do
73
66
  after "contao:setup_localconfig", "mysql:create_db"
74
67
  after "deploy:finalize_update", "contao:fix_links"
75
68
  after "contao:fix_links", "deploy:cleanup"
76
- after "deploy:restart", "contao:fix_permissions"
69
+ after "deploy:restart", "deploy:fix_permissions"
77
70
 
78
71
  # Mysql Credentials
79
72
  before "contao:setup_localconfig", "mysql:credentials"
@@ -15,6 +15,20 @@ Capistrano::Configuration.instance(:must_exist).load do
15
15
  exit
16
16
  end
17
17
  end
18
+
19
+ desc "Fix permissions"
20
+ task :fix_permissions, :roles => :app do
21
+ unless exists?(:app_owner) or exists?(:app_group)
22
+ run <<-CMD
23
+ #{try_sudo} chown -R \
24
+ #{fetch :app_owner}:#{fetch :app_group} \
25
+ #{fetch :deploy_to}/releases \
26
+ #{fetch :deploy_to}/shared
27
+ CMD
28
+ end
29
+
30
+ run "chmod -R g+w #{fetch :latest_release}" if fetch(:group_writable, true)
31
+ end
18
32
  end
19
33
 
20
34
  # Dependencies
@@ -1,6 +1,6 @@
1
1
  require 'capistrano'
2
2
  require 'highline'
3
- require 'capistrano-exts/receipts/base'
3
+ require 'capistrano-exts/receipts/deploy'
4
4
 
5
5
  # Verify that Capistrano is version 2
6
6
  unless Capistrano::Configuration.respond_to?(:instance)
@@ -1,5 +1,5 @@
1
1
  require 'capistrano'
2
- require 'capistrano-exts/receipts/base'
2
+ require 'capistrano-exts/receipts/deploy'
3
3
 
4
4
  # Verify that Capistrano is version 2
5
5
  unless Capistrano::Configuration.respond_to?(:instance)
@@ -1,31 +1,28 @@
1
1
  require 'capistrano'
2
- require 'capistrano-exts/receipts/base'
2
+ require 'capistrano-exts/receipts/deploy'
3
3
 
4
4
  # Verify that Capistrano is version 2
5
5
  unless Capistrano::Configuration.respond_to?(:instance)
6
6
  abort "This extension requires Capistrano 2"
7
7
  end
8
8
 
9
+ # TODO:
10
+ # => Replace the vars with a call to fetch
11
+ # => Add the vars to examples and the template so it is visible
12
+
9
13
  Capistrano::Configuration.instance(:must_exist).load do
10
14
 
11
15
  namespace :rails do
12
16
  desc "Install configuration files"
13
17
  task :install_configuration_files, :roles => :app do
14
- unless configuration_files.blank?
15
- configuration_files.each { |configuration_file| link_config_file(configuration_file) }
18
+ unless exists?(:configuration_files)
19
+ fetch(:configuration_files).each { |configuration_file| link_config_file(configuration_file) }
16
20
  end
17
21
  end
18
22
 
19
23
  desc "Install rvm config file"
20
24
  task :install_rvmrc_file, :roles => :app do
21
- link_file(File.join(shared_path, 'rvmrc'), File.join(release_path, '.rvmrc'))
22
- end
23
-
24
- desc "Fix permissions"
25
- task :fix_permissions, :roles => :app do
26
- unless app_owner.blank? or app_group.blank?
27
- run "#{try_sudo} chown -R #{app_owner}:#{app_group} #{deploy_to}"
28
- end
25
+ link_file(File.join(fetch(:shared_path), 'rvmrc'), File.join(fetch(:release_path), '.rvmrc'))
29
26
  end
30
27
  end
31
28
 
@@ -37,7 +34,7 @@ Capistrano::Configuration.instance(:must_exist).load do
37
34
 
38
35
  after "deploy:finalize_update", "rails:install_configuration_files"
39
36
  after "rails:install_configuration_files", "rails:install_rvmrc_file"
40
- after "deploy:restart", "rails:fix_permissions"
37
+ after "deploy:restart", "deploy:fix_permissions"
41
38
 
42
39
  # Capistrano is broken
43
40
  # See: https://github.com/capistrano/capistrano/issues/81
@@ -37,14 +37,14 @@ Capistrano::Configuration.instance(:must_exist).load do
37
37
  desc "Restart apache web server"
38
38
  task :restart do
39
39
  run <<-CMD
40
- #{try_sudo} #{apache_init_path} restart
40
+ #{try_sudo} #{fetch :apache_init_path} restart
41
41
  CMD
42
42
  end
43
43
 
44
44
  desc "Resload apache web server"
45
45
  task :reload do
46
46
  run <<-CMD
47
- #{try_sudo} #{apache_init_path} reload
47
+ #{try_sudo} #{fetch :apache_init_path} reload
48
48
  CMD
49
49
  end
50
50
 
@@ -63,14 +63,14 @@ Capistrano::Configuration.instance(:must_exist).load do
63
63
  desc "Restart nginx web server"
64
64
  task :restart do
65
65
  run <<-CMD
66
- #{try_sudo} #{nginx_init_path} restart
66
+ #{try_sudo} #{fetch :nginx_init_path} restart
67
67
  CMD
68
68
  end
69
69
 
70
70
  desc "Resload nginx web server"
71
71
  task :reload do
72
72
  run <<-CMD
73
- #{try_sudo} #{nginx_init_path} reload
73
+ #{try_sudo} #{fetch :nginx_init_path} reload
74
74
  CMD
75
75
  end
76
76
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Requirements
4
4
  require 'capistrano'
5
- require 'capistrano-exts/receipts/base'
5
+ require 'capistrano-exts/receipts/deploy'
6
6
  require 'capistrano-exts/receipts/mysql'
7
7
  require 'capistrano-exts/receipts/servers/web_server'
8
8
  require 'capistrano-exts/receipts/servers/db_server'
@@ -5,7 +5,7 @@ module Capistrano
5
5
  module Server
6
6
  class Nginx < WebServer
7
7
 
8
- AVAILABLE_MODES = [:rails_passenger, :rails_reverse_proxy, :php_fpm]
8
+ AVAILABLE_MODES = [:passenger, :rails_reverse_proxy, :php_fpm]
9
9
  NGINX_TEMPLATE_PATH = ROOT_PATH + '/capistrano-exts/templates/web_servers/nginx.conf.erb'
10
10
 
11
11
  def initialize(mode, template_path = NGINX_TEMPLATE_PATH)
@@ -35,7 +35,7 @@ module Capistrano
35
35
  end
36
36
 
37
37
  def passenger?
38
- @mode == :rails_passenger
38
+ @mode == :passenger
39
39
  end
40
40
 
41
41
  def php_build_with_force_cgi_redirect?
@@ -51,13 +51,37 @@ module Capistrano
51
51
  end
52
52
 
53
53
  if php_fpm?
54
- [:php_fpm_host, :php_fpm_port, :public_path].each do |var|
54
+ [:php_fpm_host, :php_fpm_port].each do |var|
55
55
  unless instance_variable_get("@#{var.to_s}")
56
56
  raise ArgumentError, "#{var.to_s} is required, please define it."
57
57
  end
58
58
  end
59
59
  end
60
60
 
61
+ if reverse_proxy?
62
+ if @reverse_proxy_server_address.blank? and @reverse_proxy_server_port.blank? and @reverse_proxy_socket.blank?
63
+ raise ArgumentError, "None of the address, port or socket has been defined."
64
+ end
65
+
66
+ if @reverse_proxy_server_address.present? and @reverse_proxy_server_port.blank?
67
+ raise ArgumentError, "reverse_proxy_server_address is defined but reverse_proxy_server_port is not please define it."
68
+ end
69
+
70
+ if @reverse_proxy_server_port.present? and @reverse_proxy_server_address.blank?
71
+ raise ArgumentError, "reverse_proxy_server_port is defined but reverse_proxy_server_address is not please define it."
72
+ end
73
+
74
+ if @reverse_proxy_server_address.present? and @reverse_proxy_server_port.present? and @reverse_proxy_socket.present?
75
+ raise ArgumentError, "you should not define reverse_proxy_server_address, reverse_proxy_server_port and reverse_proxy_socket."
76
+ end
77
+ end
78
+
79
+ if passenger? or php_fpm?
80
+ if @public_path.blank?
81
+ raise ArgumentError, "public_path is required, please define it."
82
+ end
83
+ end
84
+
61
85
  end
62
86
 
63
87
  end
@@ -5,6 +5,10 @@ role :web, 'root@nasreddine.com:22'
5
5
  role :app, 'root@nasreddine.com:22'
6
6
  role :db, 'root@nasreddine.com:22', primary: true
7
7
 
8
+ # Permissions (ownership)
9
+ set :app_owner, 'www'
10
+ set :app_group, 'www'
11
+
8
12
  # The project's branch to use
9
13
  # Uncomment and edit this if you're using git, for other SCM's please refer
10
14
  # to capistrano's documentation
@@ -89,9 +93,9 @@ set :web_server_mod_rewrite, true
89
93
  # Valid options:
90
94
  #
91
95
  # For Nginx:
92
- # => :rails_reverse_proxy, :rails_passenger, :php_fpm
96
+ # => :rails_reverse_proxy, :passenger, :php_fpm
93
97
  # => :rails_reverse_proxy is used for unicorn (Rack apps)
94
- # => :rails_passenger runs rails apps
98
+ # => :passenger runs rails apps
95
99
  # => :php_fpm is used to deliver websites written using PHP
96
100
  #
97
101
  # For Apache
@@ -88,7 +88,7 @@ upstream <%= @application %>_reverse_proxy {
88
88
  server <%= @reverse_proxy_server_address %>:<%= @reverse_proxy_server_port %> fail_timeout=0;
89
89
  <% end %>
90
90
 
91
- <% if @reverse_proxy_socket.blank? %>
91
+ <% if @reverse_proxy_socket.present? %>
92
92
  server unix:<%= @reverse_proxy_socket %>;
93
93
  <% end %>
94
94
  }
@@ -3,7 +3,7 @@ module Capistrano
3
3
  module Version #:nodoc:
4
4
  MAJOR = 1
5
5
  MINOR = 0
6
- TINY = 0
6
+ TINY = 1
7
7
 
8
8
  ARRAY = [MAJOR, MINOR, TINY]
9
9
  STRING = ARRAY.join(".")
@@ -27,7 +27,7 @@ describe Nginx do
27
27
  end
28
28
  end
29
29
 
30
- describe ":rails_passenger" do
30
+ describe ":passenger" do
31
31
 
32
32
  end
33
33
 
@@ -21,12 +21,16 @@ describe Nginx do
21
21
  subject { Nginx.new :php_fpm }
22
22
 
23
23
  before(:each) do
24
- subject.application_url = %w(example.com www.example.com)
24
+ subject.application_url = %w{example.com www.example.com}
25
25
  subject.application = 'example'
26
26
  subject.php_fpm_host = 'localhost'
27
27
  subject.php_fpm_port = 60313
28
28
  subject.public_path = '/path/to/application'
29
- subject.indexes = %w(index.php)
29
+ subject.indexes = %w{index.php}
30
+ end
31
+
32
+ it "should have php_fpm enabled" do
33
+ subject.send(:php_fpm?).should be_true
30
34
  end
31
35
 
32
36
  it "should require an 'application_url'" do
@@ -58,24 +62,72 @@ describe Nginx do
58
62
  end
59
63
  end
60
64
 
61
- describe ":rails_passenger" do
62
- subject { Nginx.new :rails_passenger }
65
+ describe ":passenger" do
66
+ subject { Nginx.new :passenger }
67
+
68
+ before(:each) do
69
+ subject.application_url = %w{example.com www.example.com}
70
+ subject.application = 'example'
71
+ subject.public_path = '/path/to/application'
72
+ end
63
73
 
64
- it "should require 'public_path'"
74
+ it "should require 'public_path'" do
75
+ subject.public_path = nil
76
+ lambda {
77
+ subject.render
78
+ }.should raise_error(ArgumentError, "public_path is required, please define it.")
79
+ end
65
80
 
66
- it "should have passenger enabled"
81
+ it "should have passenger enabled" do
82
+ subject.send(:passenger?).should be_true
83
+ end
67
84
  end
68
85
 
69
86
  describe ":rails_reverse_proxy" do
70
87
  subject { Nginx.new :rails_reverse_proxy }
71
88
 
72
- it "should require 'reverse_proxy_server_address'"
89
+ before(:each) do
90
+ subject.application_url = %w{example.com www.example.com}
91
+ subject.application = 'example'
92
+ subject.reverse_proxy_server_address = 'localhost'
93
+ subject.reverse_proxy_server_port = 8080
94
+ end
73
95
 
74
- it "should require 'reverse_proxy_server_port'"
96
+ it "should have reverse_proxy enabled" do
97
+ subject.send(:reverse_proxy?).should be_true
98
+ end
75
99
 
76
- it "should require 'reverse_proxy_socket'"
100
+ it "should require 'reverse_proxy_server_address' and 'reverse_proxy_server_port' or 'reverse_proxy_socket'" do
101
+ subject.reverse_proxy_server_address = nil
102
+ subject.reverse_proxy_server_port = nil
103
+ lambda {
104
+ subject.render
105
+ }.should raise_error(ArgumentError, "None of the address, port or socket has been defined.")
106
+ end
107
+
108
+ it "should force defining reverse_proxy_server_port if reverse_proxy_server_address is defined" do
109
+ subject.reverse_proxy_server_address = 'localhost'
110
+ subject.reverse_proxy_server_port = nil
77
111
 
78
- it "should have reverse_proxy enabled"
112
+ lambda {
113
+ subject.render
114
+ }.should raise_error(ArgumentError, "reverse_proxy_server_address is defined but reverse_proxy_server_port is not please define it.")
115
+ end
116
+
117
+ it "should force defining reverse_proxy_server_address if reverse_proxy_server_port is defined" do
118
+ subject.reverse_proxy_server_address = nil
119
+ subject.reverse_proxy_server_port = 8080
120
+ lambda {
121
+ subject.render
122
+ }.should raise_error(ArgumentError, "reverse_proxy_server_port is defined but reverse_proxy_server_address is not please define it.")
123
+ end
124
+
125
+ it "shouldn't allow defining both reverse_proxy_server_address and reverse_proxy_socket or reverse_proxy_server_port and reverse_proxy_socket" do
126
+ subject.reverse_proxy_socket = '/tmp/socket'
127
+ lambda {
128
+ subject.render
129
+ }.should raise_error(ArgumentError, "you should not define reverse_proxy_server_address, reverse_proxy_server_port and reverse_proxy_socket.")
130
+ end
79
131
  end
80
132
  end
81
133
 
@@ -84,12 +136,12 @@ describe Nginx do
84
136
  subject { Nginx.new :php_fpm }
85
137
 
86
138
  before(:each) do
87
- subject.application_url = %w(example.com www.example.com)
139
+ subject.application_url = %w{example.com www.example.com}
88
140
  subject.application = 'example'
89
141
  subject.php_fpm_host = 'localhost'
90
142
  subject.php_fpm_port = 60313
91
143
  subject.public_path = '/path/to/application'
92
- subject.indexes = %w(index.php)
144
+ subject.indexes = %w{index.php}
93
145
  end
94
146
 
95
147
  it "should render 'public_path'" do |variable|
@@ -123,12 +175,12 @@ describe Nginx do
123
175
  end
124
176
 
125
177
  it "should render 'application_url'" do
126
- subject.application_url = %w(technogate.fr www.technogate.fr)
178
+ subject.application_url = %w{technogate.fr www.technogate.fr}
127
179
  subject.render.should =~ %r{server_name\s+technogate.fr www.technogate.fr;}
128
180
  end
129
181
 
130
182
  it "should render 'indexes'" do
131
- subject.indexes = %w(index.php index.html)
183
+ subject.indexes = %w{index.php index.html}
132
184
  subject.render.should =~ %r{index\s+index.php index.html;}
133
185
  end
134
186
 
@@ -158,22 +210,47 @@ describe Nginx do
158
210
  end
159
211
  end
160
212
 
161
- describe ":rails_passenger" do
162
- subject { Nginx.new :rails_passenger }
213
+ describe ":passenger" do
214
+ subject { Nginx.new :passenger }
163
215
 
164
- it "should render 'application'"
216
+ before(:each) do
217
+ subject.application_url = %w{example.com www.example.com}
218
+ subject.application = 'example'
219
+ subject.public_path = '/path/to/application'
220
+ end
165
221
 
166
- it "should have passenger enabled"
222
+ it "should render 'application_url'" do
223
+ subject.application_url = %w{technogate.fr www.technogate.fr}
224
+ subject.render.should =~ %r{technogate.fr www.technogate.fr}
225
+ end
167
226
  end
168
227
 
169
228
  describe ":rails_reverse_proxy" do
170
229
  subject { Nginx.new :rails_reverse_proxy }
171
230
 
172
- it "should render 'reverse_proxy_server_address'"
231
+ before(:each) do
232
+ subject.application_url = %w{example.com www.example.com}
233
+ subject.application = 'example'
234
+ subject.reverse_proxy_server_address = 'localhost'
235
+ subject.reverse_proxy_server_port = 8080
236
+ end
173
237
 
174
- it "should render 'reverse_proxy_server_port'"
238
+ it "should render 'reverse_proxy_server_address'" do
239
+ subject.reverse_proxy_server_address = 'web_proxy'
240
+ subject.render.should =~ /upstream example_reverse_proxy .+server web_proxy:8080 fail_timeout=0;.+/m
241
+ end
175
242
 
176
- it "should render 'reverse_proxy_socket'"
243
+ it "should render 'reverse_proxy_server_port'" do
244
+ subject.reverse_proxy_server_port = 6565
245
+ subject.render.should =~ /upstream example_reverse_proxy .+server localhost:6565 fail_timeout=0;.+/m
246
+ end
247
+
248
+ it "should render 'reverse_proxy_socket'" do
249
+ subject.reverse_proxy_server_address = nil
250
+ subject.reverse_proxy_server_port = nil
251
+ subject.reverse_proxy_socket = "/tmp/socket"
252
+ subject.render.should =~ /upstream example_reverse_proxy .+server unix:\/tmp\/socket;.+/m
253
+ end
177
254
  end
178
255
  end
179
256
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-exts
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-02 00:00:00.000000000 +02:00
13
- default_executable:
12
+ date: 2011-09-03 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: capistrano
17
- requirement: &2153828600 !ruby/object:Gem::Requirement
16
+ requirement: &2156371700 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,10 @@ dependencies:
22
21
  version: 2.8.0
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *2153828600
24
+ version_requirements: *2156371700
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: i18n
28
- requirement: &2153827300 !ruby/object:Gem::Requirement
27
+ requirement: &2156370900 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: 0.6.0
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *2153827300
35
+ version_requirements: *2156370900
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: activesupport
39
- requirement: &2153825980 !ruby/object:Gem::Requirement
38
+ requirement: &2156370320 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ! '>='
@@ -44,95 +43,84 @@ dependencies:
44
43
  version: 3.1.0
45
44
  type: :runtime
46
45
  prerelease: false
47
- version_requirements: *2153825980
46
+ version_requirements: *2156370320
48
47
  - !ruby/object:Gem::Dependency
49
- name: rspec
50
- requirement: &2153824960 !ruby/object:Gem::Requirement
48
+ name: guard
49
+ requirement: &2156384460 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ! '>='
54
53
  - !ruby/object:Gem::Version
55
- version: 2.6.0
54
+ version: 0.6.2
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *2153824960
57
+ version_requirements: *2156384460
59
58
  - !ruby/object:Gem::Dependency
60
- name: mocha
61
- requirement: &2153823840 !ruby/object:Gem::Requirement
59
+ name: guard-bundler
60
+ requirement: &2156382840 !ruby/object:Gem::Requirement
62
61
  none: false
63
62
  requirements:
64
63
  - - ! '>='
65
64
  - !ruby/object:Gem::Version
66
- version: 0.2.12
65
+ version: 0.1.3
67
66
  type: :development
68
67
  prerelease: false
69
- version_requirements: *2153823840
68
+ version_requirements: *2156382840
70
69
  - !ruby/object:Gem::Dependency
71
- name: factory_girl
72
- requirement: &2153822780 !ruby/object:Gem::Requirement
70
+ name: guard-rspec
71
+ requirement: &2156382080 !ruby/object:Gem::Requirement
73
72
  none: false
74
73
  requirements:
75
74
  - - ! '>='
76
75
  - !ruby/object:Gem::Version
77
- version: 2.0.5
76
+ version: 0.4.3
78
77
  type: :development
79
78
  prerelease: false
80
- version_requirements: *2153822780
79
+ version_requirements: *2156382080
81
80
  - !ruby/object:Gem::Dependency
82
- name: faker19
83
- requirement: &2153821860 !ruby/object:Gem::Requirement
81
+ name: rspec
82
+ requirement: &2156381120 !ruby/object:Gem::Requirement
84
83
  none: false
85
84
  requirements:
86
85
  - - ! '>='
87
86
  - !ruby/object:Gem::Version
88
- version: 1.0.5
87
+ version: 2.6.0
89
88
  type: :development
90
89
  prerelease: false
91
- version_requirements: *2153821860
90
+ version_requirements: *2156381120
92
91
  - !ruby/object:Gem::Dependency
93
- name: guard
94
- requirement: &2153820720 !ruby/object:Gem::Requirement
92
+ name: mocha
93
+ requirement: &2156380360 !ruby/object:Gem::Requirement
95
94
  none: false
96
95
  requirements:
97
96
  - - ! '>='
98
97
  - !ruby/object:Gem::Version
99
- version: 0.6.2
98
+ version: 0.2.12
100
99
  type: :development
101
100
  prerelease: false
102
- version_requirements: *2153820720
101
+ version_requirements: *2156380360
103
102
  - !ruby/object:Gem::Dependency
104
- name: guard-bundler
105
- requirement: &2153819920 !ruby/object:Gem::Requirement
103
+ name: factory_girl
104
+ requirement: &2156379840 !ruby/object:Gem::Requirement
106
105
  none: false
107
106
  requirements:
108
107
  - - ! '>='
109
108
  - !ruby/object:Gem::Version
110
- version: 0.1.3
109
+ version: 2.0.5
111
110
  type: :development
112
111
  prerelease: false
113
- version_requirements: *2153819920
112
+ version_requirements: *2156379840
114
113
  - !ruby/object:Gem::Dependency
115
- name: guard-rspec
116
- requirement: &2153819160 !ruby/object:Gem::Requirement
114
+ name: faker19
115
+ requirement: &2156379320 !ruby/object:Gem::Requirement
117
116
  none: false
118
117
  requirements:
119
118
  - - ! '>='
120
119
  - !ruby/object:Gem::Version
121
- version: 0.4.3
122
- type: :development
123
- prerelease: false
124
- version_requirements: *2153819160
125
- - !ruby/object:Gem::Dependency
126
- name: growl_notify
127
- requirement: &2153818460 !ruby/object:Gem::Requirement
128
- none: false
129
- requirements:
130
- - - =
131
- - !ruby/object:Gem::Version
132
- version: 0.0.1
120
+ version: 1.0.5
133
121
  type: :development
134
122
  prerelease: false
135
- version_requirements: *2153818460
123
+ version_requirements: *2156379320
136
124
  description: Handy extensions for Capistrano
137
125
  email:
138
126
  - wael.nasreddine@gmail.com
@@ -141,8 +129,11 @@ extensions: []
141
129
  extra_rdoc_files: []
142
130
  files:
143
131
  - .gitignore
132
+ - .travis.yml
144
133
  - Gemfile
145
134
  - Guardfile
135
+ - MIT-LICENSE
136
+ - README.md
146
137
  - Rakefile
147
138
  - capistrano-exts.gemspec
148
139
  - examples/php_fpm/deploy.rb
@@ -161,8 +152,8 @@ files:
161
152
  - lib/capistrano-exts/core_ext.rb
162
153
  - lib/capistrano-exts/core_ext/string/filters.rb
163
154
  - lib/capistrano-exts/receipts.rb
164
- - lib/capistrano-exts/receipts/base.rb
165
155
  - lib/capistrano-exts/receipts/contao.rb
156
+ - lib/capistrano-exts/receipts/deploy.rb
166
157
  - lib/capistrano-exts/receipts/functions.rb
167
158
  - lib/capistrano-exts/receipts/git.rb
168
159
  - lib/capistrano-exts/receipts/god.rb
@@ -187,7 +178,6 @@ files:
187
178
  - spec/servers/web_server/nginx_spec.rb
188
179
  - spec/spec_helper.rb
189
180
  - spec/support/factories.rb
190
- has_rdoc: true
191
181
  homepage: https://github.com/Extensions/capistrano-exts
192
182
  licenses: []
193
183
  post_install_message:
@@ -208,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
198
  version: '0'
209
199
  requirements: []
210
200
  rubyforge_project: capistrano-exts
211
- rubygems_version: 1.6.2
201
+ rubygems_version: 1.8.10
212
202
  signing_key:
213
203
  specification_version: 3
214
204
  summary: Handy extensions for Capistrano