errorstudio_capistrano_recipes 0.1.10

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 (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/CODE_OF_CONDUCT.md +13 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +29 -0
  9. data/Rakefile +1 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +7 -0
  12. data/errorstudio_capistrano_recipes.gemspec +34 -0
  13. data/lib/capistrano/errorstudio.rb +5 -0
  14. data/lib/capistrano/errorstudio/composer.rb +3 -0
  15. data/lib/capistrano/errorstudio/cron.rb +2 -0
  16. data/lib/capistrano/errorstudio/nginx.rb +2 -0
  17. data/lib/capistrano/errorstudio/ownership.rb +1 -0
  18. data/lib/capistrano/errorstudio/passenger.rb +2 -0
  19. data/lib/capistrano/errorstudio/prompts.rb +1 -0
  20. data/lib/capistrano/errorstudio/rails.rb +13 -0
  21. data/lib/capistrano/errorstudio/rvm.rb +4 -0
  22. data/lib/capistrano/errorstudio/static.rb +4 -0
  23. data/lib/capistrano/errorstudio/tasks/composer.rake +12 -0
  24. data/lib/capistrano/errorstudio/tasks/cron.rake +15 -0
  25. data/lib/capistrano/errorstudio/tasks/nginx.rake +198 -0
  26. data/lib/capistrano/errorstudio/tasks/ownership.rake +11 -0
  27. data/lib/capistrano/errorstudio/tasks/passenger.rake +76 -0
  28. data/lib/capistrano/errorstudio/tasks/prompts.rake +18 -0
  29. data/lib/capistrano/errorstudio/tasks/rails.rake +80 -0
  30. data/lib/capistrano/errorstudio/tasks/rvm.rake +49 -0
  31. data/lib/capistrano/errorstudio/tasks/static.rake +0 -0
  32. data/lib/capistrano/errorstudio/tasks/templates/nginx/basic_auth.erb +8 -0
  33. data/lib/capistrano/errorstudio/tasks/templates/nginx/cloudflare_real_ips.erb +4 -0
  34. data/lib/capistrano/errorstudio/tasks/templates/nginx/cors.erb +34 -0
  35. data/lib/capistrano/errorstudio/tasks/templates/nginx/custom_aliases.erb +5 -0
  36. data/lib/capistrano/errorstudio/tasks/templates/nginx/custom_rules.erb +3 -0
  37. data/lib/capistrano/errorstudio/tasks/templates/nginx/location_proxy_cache.erb +6 -0
  38. data/lib/capistrano/errorstudio/tasks/templates/nginx/nginx_vhost.conf.erb +84 -0
  39. data/lib/capistrano/errorstudio/tasks/templates/nginx/path_redirects.erb +5 -0
  40. data/lib/capistrano/errorstudio/tasks/templates/nginx/php.erb +27 -0
  41. data/lib/capistrano/errorstudio/tasks/templates/nginx/proxy_cache_path.erb +1 -0
  42. data/lib/capistrano/errorstudio/tasks/templates/nginx/redirects.erb +10 -0
  43. data/lib/capistrano/errorstudio/tasks/templates/nginx/rewrites.erb +7 -0
  44. data/lib/capistrano/errorstudio/tasks/templates/nginx/ssl_settings.erb +24 -0
  45. data/lib/capistrano/errorstudio/tasks/templates/nginx/upstream_proxy.erb +11 -0
  46. data/lib/capistrano/errorstudio/tasks/templates/passenger/passenger_init.erb +27 -0
  47. data/lib/capistrano/errorstudio/tasks/templates/rails/database.yml.erb +8 -0
  48. data/lib/capistrano/errorstudio/tasks/templates/rails/secrets.yml.erb +5 -0
  49. data/lib/capistrano/errorstudio/tasks/templates/wordpress/env.erb +23 -0
  50. data/lib/capistrano/errorstudio/tasks/wordpress.rake +158 -0
  51. data/lib/capistrano/errorstudio/wordpress.rb +12 -0
  52. data/lib/version.rb +3 -0
  53. metadata +209 -0
@@ -0,0 +1,7 @@
1
+ <% fetch(:url_rewrites,{}).each do |regex, target| %>
2
+ server {
3
+ <%= fetch(:nginx_configuration,{})[:cloudflare_real_ips] %>
4
+ server_name <%= regex %>;
5
+ return 301 $scheme://<%= fetch(:deploy_domain) %><%= target %>;
6
+ }
7
+ <% end %>
@@ -0,0 +1,24 @@
1
+
2
+ <% if fetch(:default_ssl_host, false)%>
3
+ listen 443 default_server ssl;
4
+ <% else %>
5
+ listen 443 ssl;
6
+ listen 80;
7
+ <% end %>
8
+ ssl_certificate /etc/nginx/ssl/<%= fetch(:deploy_domain) %>.crt;
9
+ ssl_certificate_key /etc/nginx/ssl/<%= fetch(:deploy_domain) %>.key;
10
+ ssl_dhparam /etc/nginx/ssl/<%= fetch(:deploy_domain) %>.pem;
11
+ ssl_prefer_server_ciphers On;
12
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
13
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
14
+ <% if fetch(:include_nginx_hpkp, false) %>
15
+ add_header Public-Key-Pins 'pin-sha256="<%= fetch(:certificate_sha256).strip %>"; max-age=5184000; includeSubDomains';
16
+ <% end %>
17
+ <% if fetch(:force_ssl,true) %>
18
+ if ($server_port = 80) {
19
+ return 301 https://$host$request_uri;
20
+ }
21
+ <% if fetch(:include_nginx_hsts, false) %>
22
+ add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
23
+ <% end %>
24
+ <% end %>
@@ -0,0 +1,11 @@
1
+ location <%= fetch(:proxy_for_location, "/") %> {
2
+ if ($args ~* "domain_redirected=(.*)$") {
3
+ add_header X-domain-redirected $1;
4
+ }
5
+ proxy_pass <%= fetch(:upstream_proxy_scheme, "http://") %><%= fetch(:upstream_proxy_host, "127.0.0.1") %>:<%= fetch(:upstream_proxy_port) %>;
6
+ proxy_read_timeout <%= fetch(:upstream_proxy_read_timeout, "3m") %>;
7
+ proxy_set_header X-Real-IP $remote_addr;
8
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
9
+ proxy_set_header Host $host;
10
+ proxy_set_header X-Forwarded-Proto $scheme;
11
+ }
@@ -0,0 +1,27 @@
1
+ #! /bin/sh
2
+ ### BEGIN INIT INFO
3
+ # Provides: <%= fetch(:application) %>_<%= fetch(:rails_env) %>_passenger
4
+ # Required-Start: $remote_fs $syslog
5
+ # Required-Stop: $remote_fs $syslog
6
+ # Default-Start: 2 3 4 5
7
+ # Default-Stop: 0 1 6
8
+ # Short-Description: Passenger for <%= fetch(:application) %>
9
+ # Description: This file starts and stops Passenger for <%= fetch(:application) %>, <%= fetch(:rails_env) %> environment
10
+ #
11
+ ### END INIT INFO
12
+
13
+ case "$1" in
14
+ start)
15
+ <%= start_passenger_command %>
16
+ ;;
17
+ stop)
18
+ <%= stop_passenger_command %>
19
+ ;;
20
+ restart)
21
+ <%= restart_passenger_command %>
22
+ ;;
23
+ *)
24
+ echo "Usage: <%= fetch(:application) %>_<%= fetch(:rails_env) %>_passenger {start|stop|restart}" >&2
25
+ exit 3
26
+ ;;
27
+ esac
@@ -0,0 +1,8 @@
1
+ <%= fetch(:rails_env)%>:
2
+ adapter: <%= fetch(:db_adaptor,'mysql2') %>
3
+ encoding: <%= fetch(:db_encoding,'utf8') %>
4
+ database: <%= fetch(:db_name) %>
5
+ pool: <%= fetch(:db_pool,5) %>
6
+ username: <%= fetch(:db_username) %>
7
+ password: <%= fetch(:db_password) %>
8
+ host: <%= fetch(:db_server) %>
@@ -0,0 +1,5 @@
1
+ <%= fetch(:stage) %>:
2
+ secret_key_base: <%= fetch(:secret_key_base) %>
3
+ <% fetch(:common_secrets, {}).each do |k,v| -%>
4
+ <%= k %>: <%= v %>
5
+ <% end -%>
@@ -0,0 +1,23 @@
1
+ DB_NAME=<%= fetch(:db_name)%>
2
+ DB_USER=<%= fetch(:db_username) %>
3
+ DB_PASSWORD=<%= fetch(:db_password)%>
4
+ DB_HOST=<%= fetch(:db_host) %>
5
+ DB_PREFIX=<%= fetch(:db_prefix) %>
6
+
7
+ WP_ENV=<%= fetch(:stage) %>
8
+ WP_URL=<%= fetch(:ssl_required,false) ? "https://" : "http://" %><%= fetch(:deploy_domain) %>
9
+ WP_HOME=<%= fetch(:ssl_required,false) ? "https://" : "http://" %><%= fetch(:deploy_domain) %>
10
+ WP_SITEURL=<%= fetch(:ssl_required,false) ? "https://" : "http://" %><%= fetch(:deploy_domain) %>
11
+ DOMAIN_CURRENT_SITE=<%= fetch(:deploy_domain) %>
12
+ AUTH_KEY=<%= fetch(:wp_auth_key) %>
13
+ SECURE_AUTH_KEY=<%= fetch(:wp_secure_auth_key) %>
14
+ LOGGED_IN_KEY=<%= fetch(:wp_logged_in_key) %>
15
+ NONCE_KEY=<%= fetch(:wp_nonce_key) %>
16
+ AUTH_SALT=<%= fetch(:wp_auth_salt) %>
17
+ SECURE_AUTH_SALT=<%= fetch(:wp_secure_auth_salt) %>
18
+ LOGGED_IN_SALT=<%= fetch(:wp_logged_in_salt) %>
19
+ NONCE_SALT=<%= fetch(:wp_nonce_salt) %>
20
+
21
+ <% fetch(:custom_env_vars,{}).each do |env,var| %>
22
+ <%= "#{env}=#{var}" %>
23
+ <% end %>
@@ -0,0 +1,158 @@
1
+ namespace :wordpress do
2
+ namespace :assets do
3
+ desc "Download assets for the site"
4
+ task :download do
5
+ on roles(:web) do
6
+ if ENV.has_key?('delete') and ENV['delete']
7
+ if confirm("You're about to download assets from the server and delete your local")
8
+ puts %x(rsync -rlvz --delete #{fetch(:web_server)}:#{shared_path}/#{fetch(:uploads_folder)}/ ./#{fetch(:uploads_folder)}/)
9
+ end
10
+ else
11
+ puts "Downloading assets"
12
+ puts %x(rsync -rlvz #{fetch(:web_server)}:#{shared_path}/#{fetch(:uploads_folder)}/ ./#{fetch(:uploads_folder)}/)
13
+ end
14
+ end
15
+ end
16
+
17
+ desc "Upload assets on the server. Optionally pass delete env var to rsync with the --delete switch"
18
+ task :upload do
19
+ on roles(:web) do |server|
20
+ if ENV.has_key?('delete') and ENV['delete']
21
+ if confirm("You're about to upload assets to the server and delete any differences")
22
+ puts %x(rsync -rlvz --delete ./#{fetch(:uploads_folder)}/ #{server.hostname}:#{shared_path}/#{fetch(:uploads_folder)}/)
23
+ end
24
+ else
25
+ puts "Uploading new assets"
26
+ puts %x(rsync -rlvz ./#{fetch(:uploads_folder)}/ #{server.hostname}:#{shared_path}/#{fetch(:uploads_folder)}/)
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ namespace :code do
33
+ desc "Download the code from the server."
34
+ task :download do
35
+ on roles(:web) do |server|
36
+ if confirm("You're about to download code from the server")
37
+ puts %x(rsync -rlvz --exclude='wp-config.php' --exclude='config/' --exclude='#{fetch(:uploads_folder)}' #{server.hostname}:#{current_path}/public/ ./public/)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ # The order of tasks here is: wordpress:db:create_config [check the config doesn't exist] => wordpress:db:create => wordpress:db:grant
44
+ namespace :db do
45
+ set :db_password, (0...20).map{ [('0'..'9'),('A'..'Z'),('a'..'z')].map {|range| range.to_a}.flatten[rand(64)] }.join
46
+ set :db_username, -> {"#{fetch(:application).gsub(/[^A-z]/,"").to_s[0..7]}_#{fetch(:stage).to_s[0..3]}"}
47
+ set :db_name, -> {"#{fetch(:application).gsub(/[^A-z]/,"").to_s[0..53]}_#{fetch(:db_suffix, fetch(:stage).to_s[0..9])}"}
48
+ desc 'Generate a config for wordpress / bedrock'
49
+ task :create_config do
50
+ on roles(:app) do
51
+ unless test("[ -f #{shared_path}/.env ]")
52
+ puts "running the create config task."
53
+ [
54
+ "wp_auth_key",
55
+ "wp_secure_auth_key",
56
+ "wp_logged_in_key",
57
+ "wp_nonce_key",
58
+ "wp_auth_salt",
59
+ "wp_secure_auth_salt",
60
+ "wp_logged_in_salt",
61
+ "wp_nonce_salt"
62
+ ].each do |k|
63
+ if fetch(:"#{k}",nil).nil?
64
+ set :"#{k}", SecureRandom.urlsafe_base64(40)
65
+ end
66
+ end
67
+ file = File.join(File.dirname(__FILE__), "templates", "wordpress", "env.erb")
68
+ buffer = ERB.new(File.read(file)).result(binding)
69
+ upload! StringIO.new(buffer), "#{shared_path}/.env"
70
+ invoke "wordpress:db:create"
71
+ end
72
+ end
73
+ end
74
+
75
+ desc "Create the database unless it exists"
76
+ task :create do
77
+ on roles(:db) do
78
+ prompt_for_login
79
+ db_sql = "CREATE DATABASE IF NOT EXISTS #{fetch(:db_name)};"
80
+ execute "mysql --user=#{fetch(:server_admin_username)} --password=#{fetch(:server_admin_password)} --execute=\"#{db_sql}\""
81
+ end
82
+ invoke "wordpress:db:grant"
83
+ end
84
+
85
+ desc "Grant access to the database"
86
+ task :grant do
87
+ on roles(:db) do
88
+ prompt_for_login
89
+ puts "Creating #{fetch(:wp_db_user)}"
90
+ %w{10.% 127.% localhost}.each do |ip|
91
+ user_sql = "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER on #{fetch(:db_name)}.* TO #{fetch(:db_username)}@'#{ip}' IDENTIFIED BY '#{fetch(:db_password)}';"
92
+ execute "mysql --user=#{fetch(:server_admin_username)} --password=#{fetch(:server_admin_password)} --execute=\"#{user_sql}\""
93
+ end
94
+ end
95
+ end
96
+
97
+ desc "Upload a local wordpress db to the server"
98
+ task :upload do
99
+ on roles(:db) do
100
+ if confirm("You're about to overwrite the #{fetch(:wp_db_name)} database on the server")
101
+ prompt_for_login
102
+ get_db_details
103
+ if fetch(:ssl_required,false)
104
+ db = %x(mysqldump --add-drop-table --host='#{fetch(:local_db_server)}' --port='#{fetch(:local_db_port)}' --user='#{fetch(:local_db_username)}' --password='#{fetch(:local_db_password)}' #{fetch(:local_db_name)} | sed 's/#{fetch(:local_domain)}/#{fetch(:deploy_domain)}/g' | sed 's/http:\\/\\/#{fetch(:deploy_domain)}/https:\\/\\/#{fetch(:deploy_domain)}/g' | gzip)
105
+ else
106
+ db = %x(mysqldump --add-drop-table --host='#{fetch(:local_db_server)}' --port='#{fetch(:local_db_port)}' --user='#{fetch(:local_db_username)}' --password='#{fetch(:local_db_password)}' #{fetch(:local_db_name)} | sed 's/#{fetch(:local_domain)}/#{fetch(:deploy_domain)}/g' | gzip)
107
+ end
108
+ upload! StringIO.new(db), "/tmp/#{fetch(:deploy_domain)}.sql.gz"
109
+ puts "Setting up database"
110
+ execute "zcat /tmp/#{fetch(:deploy_domain)}.sql.gz | mysql --user=#{fetch(:server_admin_username)} --password=#{fetch(:server_admin_password)} #{fetch(:db_name)}"
111
+ execute "rm /tmp/#{fetch(:deploy_domain)}.sql.gz"
112
+ end
113
+ end
114
+ end
115
+
116
+ desc "Download the live db for local development"
117
+ task :download do
118
+ on roles(:db) do
119
+ if confirm("You're about to overwrite your local database.")
120
+ prompt_for_login
121
+ get_db_details
122
+ if fetch(:ssl_required,false)
123
+ execute "mysqldump --add-drop-table --skip-extended-insert --user='#{fetch(:server_admin_username)}' --password='#{fetch(:server_admin_password)}' #{fetch(:db_name)} | sed 's/#{fetch(:deploy_domain)}/#{fetch(:local_domain)}/g' | sed 's/https:\\/\\/#{fetch(:local_domain)}/http:\\/\\/#{fetch(:local_domain)}/g' | gzip > /tmp/#{fetch(:deploy_domain)}.sql.gz"
124
+ else
125
+ execute "mysqldump --add-drop-table --skip-extended-insert --user='#{fetch(:server_admin_username)}' --password='#{fetch(:server_admin_password)}' #{fetch(:db_name)} | sed 's/#{fetch(:deploy_domain)}/#{fetch(:local_domain)}/g' | gzip > /tmp/#{fetch(:deploy_domain)}.sql.gz"
126
+ end
127
+ download! "/tmp/#{fetch(:deploy_domain)}.sql.gz","#{fetch(:deploy_domain)}.sql.gz"
128
+ %x(gunzip -c #{fetch(:deploy_domain)}.sql.gz | mysql --max_allowed_packet=1000M --host='#{fetch(:local_db_server)}' --port='#{fetch(:local_db_port)}' --user='#{fetch(:local_db_username)}' --password='#{fetch(:local_db_password)}' #{fetch(:local_db_name)})
129
+ execute "rm /tmp/#{fetch(:deploy_domain)}.sql.gz"
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+
136
+
137
+ desc "Symlink the .env file with config for the site"
138
+ task :symlink_env => "db:create_config" do
139
+ on roles(:app) do
140
+ execute "ln -s #{shared_path}/.env #{current_path}/public/"
141
+ end
142
+ end
143
+ end
144
+
145
+
146
+ def get_db_details
147
+ set :local_domain, fetch(:local_domain,ask("Local WP domain", ""))
148
+ set :local_db_username, fetch(:local_db_username,ask("Local DB username", ""))
149
+ set :local_db_password, fetch(:local_db_password,ask("Local DB password", ""))
150
+ set :local_db_server, fetch(:local_db_server,ask("Local DB server port", "localhost"))
151
+ set :local_db_server_port, fetch(:local_db_server_port,ask("Local DB server port", 3306))
152
+ set :local_db_name, fetch(:local_db_name,ask("Local DB name",fetch(:application)))
153
+ end
154
+
155
+ after "deploy:check:make_linked_dirs", "wordpress:db:create_config"
156
+ after "deploy:check", "nginx:check_config"
157
+ before "deploy:cleanup", "deploy:set_ownership"
158
+ before "deploy:cleanup", "wordpress:symlink_env"
@@ -0,0 +1,12 @@
1
+ require 'capistrano/errorstudio'
2
+ require 'securerandom'
3
+ require 'capistrano/errorstudio/composer'
4
+ require 'capistrano/errorstudio/nginx'
5
+ set :web_server, ->{ roles(:web).first.hostname }
6
+ set :db_server, ->{ roles(:db).first.hostname }
7
+ set :linked_dirs, fetch(:linked_dirs,[]).push(fetch(:uploads_folder,"public/wp-content/uploads"))
8
+ # set :wp_db_host, fetch(:wp_db_host, "localhost")
9
+ # set :wp_db_prefix, fetch(:wp_db_prefix, "wp_")
10
+ set :php_required, true
11
+ load File.expand_path("../tasks/wordpress.rake", __FILE__)
12
+
@@ -0,0 +1,3 @@
1
+ module ErrorstudioCapistranoRecipes
2
+ VERSION = "0.1.10"
3
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: errorstudio_capistrano_recipes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.10
5
+ platform: ruby
6
+ authors:
7
+ - Ed Jones
8
+ - Paul Hendrick
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2018-07-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.10'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.10'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: capistrano
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 3.11.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 3.11.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: capistrano-composer
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.0.6
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 0.0.6
70
+ - !ruby/object:Gem::Dependency
71
+ name: capistrano-bundler
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: capistrano-rails
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rvm1-capistrano3
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: capistrano-passenger
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: Cap recipes we use to deploy our websites.
127
+ email:
128
+ - ed@error.agency
129
+ - paul@error.agency
130
+ executables: []
131
+ extensions: []
132
+ extra_rdoc_files: []
133
+ files:
134
+ - ".gitignore"
135
+ - ".ruby-gemset"
136
+ - ".ruby-version"
137
+ - CODE_OF_CONDUCT.md
138
+ - Gemfile
139
+ - LICENSE.txt
140
+ - README.md
141
+ - Rakefile
142
+ - bin/console
143
+ - bin/setup
144
+ - errorstudio_capistrano_recipes.gemspec
145
+ - lib/capistrano/errorstudio.rb
146
+ - lib/capistrano/errorstudio/composer.rb
147
+ - lib/capistrano/errorstudio/cron.rb
148
+ - lib/capistrano/errorstudio/nginx.rb
149
+ - lib/capistrano/errorstudio/ownership.rb
150
+ - lib/capistrano/errorstudio/passenger.rb
151
+ - lib/capistrano/errorstudio/prompts.rb
152
+ - lib/capistrano/errorstudio/rails.rb
153
+ - lib/capistrano/errorstudio/rvm.rb
154
+ - lib/capistrano/errorstudio/static.rb
155
+ - lib/capistrano/errorstudio/tasks/composer.rake
156
+ - lib/capistrano/errorstudio/tasks/cron.rake
157
+ - lib/capistrano/errorstudio/tasks/nginx.rake
158
+ - lib/capistrano/errorstudio/tasks/ownership.rake
159
+ - lib/capistrano/errorstudio/tasks/passenger.rake
160
+ - lib/capistrano/errorstudio/tasks/prompts.rake
161
+ - lib/capistrano/errorstudio/tasks/rails.rake
162
+ - lib/capistrano/errorstudio/tasks/rvm.rake
163
+ - lib/capistrano/errorstudio/tasks/static.rake
164
+ - lib/capistrano/errorstudio/tasks/templates/nginx/basic_auth.erb
165
+ - lib/capistrano/errorstudio/tasks/templates/nginx/cloudflare_real_ips.erb
166
+ - lib/capistrano/errorstudio/tasks/templates/nginx/cors.erb
167
+ - lib/capistrano/errorstudio/tasks/templates/nginx/custom_aliases.erb
168
+ - lib/capistrano/errorstudio/tasks/templates/nginx/custom_rules.erb
169
+ - lib/capistrano/errorstudio/tasks/templates/nginx/location_proxy_cache.erb
170
+ - lib/capistrano/errorstudio/tasks/templates/nginx/nginx_vhost.conf.erb
171
+ - lib/capistrano/errorstudio/tasks/templates/nginx/path_redirects.erb
172
+ - lib/capistrano/errorstudio/tasks/templates/nginx/php.erb
173
+ - lib/capistrano/errorstudio/tasks/templates/nginx/proxy_cache_path.erb
174
+ - lib/capistrano/errorstudio/tasks/templates/nginx/redirects.erb
175
+ - lib/capistrano/errorstudio/tasks/templates/nginx/rewrites.erb
176
+ - lib/capistrano/errorstudio/tasks/templates/nginx/ssl_settings.erb
177
+ - lib/capistrano/errorstudio/tasks/templates/nginx/upstream_proxy.erb
178
+ - lib/capistrano/errorstudio/tasks/templates/passenger/passenger_init.erb
179
+ - lib/capistrano/errorstudio/tasks/templates/rails/database.yml.erb
180
+ - lib/capistrano/errorstudio/tasks/templates/rails/secrets.yml.erb
181
+ - lib/capistrano/errorstudio/tasks/templates/wordpress/env.erb
182
+ - lib/capistrano/errorstudio/tasks/wordpress.rake
183
+ - lib/capistrano/errorstudio/wordpress.rb
184
+ - lib/version.rb
185
+ homepage: https://github.com/errorstudio/errorstudio_capistrano_recipes
186
+ licenses:
187
+ - MIT
188
+ metadata: {}
189
+ post_install_message:
190
+ rdoc_options: []
191
+ require_paths:
192
+ - lib
193
+ required_ruby_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ requirements: []
204
+ rubyforge_project:
205
+ rubygems_version: 2.6.14
206
+ signing_key:
207
+ specification_version: 4
208
+ summary: Error's cap recipes
209
+ test_files: []