uberspacify 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Uberspacify
2
2
 
3
- Uberspacify helps you deploy a Ruby on Rails app on Uberspace, a popular German shared hosting provider.
3
+ Uberspacify helps you deploy a Ruby on Rails app on Uberspace, a popular shared hosting provider.
4
4
 
5
5
  All the magic is built into a couple nice Capistrano scripts. Uberspacify will create an environment for your app, install Passenger, run it in standalone mode, monitor it using Daemontools, and configure Apache to reverse-proxy to it. Uberspacify will also find out your Uberspace MySQL password and create databases as well as a `database.yml`
6
6
 
@@ -31,7 +31,11 @@ load 'deploy/assets'
31
31
  Now, you need to add a few lines regarding your Uberspace to your `config/deploy.rb`. It is safe to copy, paste & adapt the following:
32
32
 
33
33
  ```ruby
34
- require 'uberspacify/recipes'
34
+ # include uberspacify base recipes
35
+ require 'uberspacify/base'
36
+
37
+ # uncomment this if you don't use MySQL
38
+ require 'uberspacify/mysql'
35
39
 
36
40
  # the Uberspace server you are on
37
41
  server 'phoenix.uberspace.de', :web, :app, :db, :primary => true
@@ -58,6 +62,11 @@ set :repository, 'https://github.com/yeah/dummyapp.git'
58
62
  # be available on port 80 and 443 from the outside. However, if you'd like to
59
63
  # set this yourself, go ahead.
60
64
  # set :passenger_port, 55555
65
+
66
+ # By default, Ruby Enterprise Edition 1.8.7 is used for Uberspace. If you
67
+ # prefer Ruby 1.9 or any other version, please refer to the RVM documentation
68
+ # at https://rvm.io/integration/capistrano/ and set this variable.
69
+ # set :rvm_ruby_string, '1.9.3@rails-dummyapp'
61
70
  ```
62
71
 
63
72
  Done. That was the hard part. It's easy from here on out. Next, add all new/modified files to version control. If you use Git, the following will do:
@@ -0,0 +1,107 @@
1
+ require 'capistrano_colors'
2
+ require 'rvm/capistrano'
3
+ require 'bundler/capistrano'
4
+
5
+ def abort_red(msg)
6
+ abort " * \e[#{1};31mERROR: #{msg}\e[0m"
7
+ end
8
+
9
+ Capistrano::Configuration.instance.load do
10
+
11
+ # required variables
12
+ _cset(:user) { abort_red "Please configure your Uberspace user in config/deploy.rb using 'set :user, <username>'" }
13
+ _cset(:repository) { abort_red "Please configure your code repository config/deploy.rb using 'set :repository, <repo uri>'" }
14
+
15
+ # optional variables
16
+ _cset(:domain) { nil }
17
+ _cset(:passenger_port) { rand(61000-32768+1)+32768 } # random ephemeral port
18
+
19
+ _cset(:deploy_via) { :remote_cache }
20
+ _cset(:git_enable_submodules) { 1 }
21
+ _cset(:branch) { 'master' }
22
+
23
+ _cset(:keep_releases) { 3 }
24
+
25
+ # uberspace presets
26
+ set(:deploy_to) { "/var/www/virtual/#{user}/rails/#{application}" }
27
+ set(:home) { "/home/#{user}" }
28
+ set(:use_sudo) { false }
29
+ set(:rvm_type) { :user }
30
+ set(:rvm_install_ruby) { :install }
31
+ set(:rvm_ruby_string) { "ree@rails-#{application}" }
32
+
33
+ ssh_options[:forward_agent] = true
34
+ default_run_options[:pty] = true
35
+
36
+ # callbacks
37
+ before 'deploy:setup', 'rvm:install_rvm'
38
+ before 'deploy:setup', 'rvm:install_ruby'
39
+ after 'deploy:setup', 'uberspace:setup_svscan'
40
+ after 'deploy:setup', 'daemontools:setup_daemon'
41
+ after 'deploy:setup', 'apache:setup_reverse_proxy'
42
+ after 'deploy:update_code', 'deploy:symlink_shared'
43
+ after 'deploy', 'deploy:cleanup'
44
+
45
+ # custom recipes
46
+ namespace :uberspace do
47
+ task :setup_svscan do
48
+ run 'uberspace-setup-svscan ; echo 0'
49
+ end
50
+ end
51
+
52
+ namespace :daemontools do
53
+ task :setup_daemon do
54
+ daemon_script = <<-EOF
55
+ #!/bin/bash
56
+ export HOME=#{fetch :home}
57
+ source $HOME/.bash_profile
58
+ cd #{fetch :deploy_to}/current
59
+ rvm use #{fetch :rvm_ruby_string}
60
+ exec bundle exec passenger start -p #{fetch :passenger_port} -e production 2>&1
61
+ EOF
62
+
63
+ log_script = <<-EOF
64
+ #!/bin/sh
65
+ exec multilog t ./main
66
+ EOF
67
+
68
+ run "mkdir -p #{fetch :home}/etc/run-rails-#{fetch :application}"
69
+ run "mkdir -p #{fetch :home}/etc/run-rails-#{fetch :application}/log"
70
+ put daemon_script, "#{fetch :home}/etc/run-rails-#{fetch :application}/run"
71
+ put log_script, "#{fetch :home}/etc/run-rails-#{fetch :application}/log/run"
72
+ run "chmod +x #{fetch :home}/etc/run-rails-#{fetch :application}/run"
73
+ run "chmod +x #{fetch :home}/etc/run-rails-#{fetch :application}/log/run"
74
+ run "ln -nfs #{fetch :home}/etc/run-rails-#{fetch :application} #{fetch :home}/service/rails-#{fetch :application}"
75
+
76
+ end
77
+ end
78
+
79
+ namespace :apache do
80
+ task :setup_reverse_proxy do
81
+ htaccess = <<-EOF
82
+ RewriteEngine On
83
+ RewriteRule ^(.*)$ http://localhost:#{fetch :passenger_port}/$1 [P]
84
+ EOF
85
+ path = fetch(:domain) ? "/var/www/virtual/#{fetch :user}/#{fetch :domain}" : "#{fetch :home}/html"
86
+ run "mkdir -p #{path}"
87
+ put htaccess, "#{path}/.htaccess"
88
+ end
89
+ end
90
+
91
+ namespace :deploy do
92
+ task :start do
93
+ run "svc -u #{fetch :home}/service/rails-#{fetch :application}"
94
+ end
95
+ task :stop do
96
+ run "svc -d #{fetch :home}/service/rails-#{fetch :application}"
97
+ end
98
+ task :restart do
99
+ run "svc -du #{fetch :home}/service/rails-#{fetch :application}"
100
+ end
101
+
102
+ task :symlink_shared do
103
+ run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
104
+ end
105
+ end
106
+
107
+ end
@@ -0,0 +1,38 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ # callbacks
4
+ after 'deploy:setup', 'mysql:setup_database_and_config'
5
+
6
+ # custom recipes
7
+ namespace :mysql do
8
+ task :setup_database_and_config do
9
+ my_cnf = capture('cat ~/.my.cnf')
10
+ config = {}
11
+ %w(development production test).each do |env|
12
+
13
+ config[env] = {
14
+ 'adapter' => 'mysql2',
15
+ 'encoding' => 'utf8',
16
+ 'database' => "#{fetch :user}_rails_#{fetch :application}_#{env}",
17
+ 'host' => 'localhost'
18
+ }
19
+
20
+ my_cnf.match(/^user=(\w+)/)
21
+ config[env]['username'] = $1
22
+
23
+ my_cnf.match(/^password=(\w+)/)
24
+ config[env]['password'] = $1
25
+
26
+ my_cnf.match(/^port=(\d+)/)
27
+ config[env]['port'] = $1.to_i
28
+
29
+ run "mysql -e 'CREATE DATABASE IF NOT EXISTS #{config[env]['database']} CHARACTER SET utf8 COLLATE utf8_general_ci;'"
30
+ end
31
+
32
+ run "mkdir -p #{fetch :shared_path}/config"
33
+ put config.to_yaml, "#{fetch :shared_path}/config/database.yml"
34
+
35
+ end
36
+ end
37
+
38
+ end
@@ -1,139 +1,2 @@
1
- require 'capistrano_colors'
2
- require 'rvm/capistrano'
3
- require 'bundler/capistrano'
4
-
5
- def abort_red(msg)
6
- abort " * \e[#{1};31mERROR: #{msg}\e[0m"
7
- end
8
-
9
- Capistrano::Configuration.instance.load do
10
-
11
- # required variables
12
- _cset(:user) { abort_red "Please configure your Uberspace user in config/deploy.rb using 'set :user, <username>'" }
13
- _cset(:repository) { abort_red "Please configure your code repository config/deploy.rb using 'set :repository, <repo uri>'" }
14
-
15
- # optional variables
16
- _cset(:domain) { nil }
17
- _cset(:passenger_port) { rand(61000-32768+1)+32768 } # random ephemeral port
18
-
19
- _cset(:deploy_via) { :remote_cache }
20
- _cset(:git_enable_submodules) { 1 }
21
- _cset(:branch) { 'master' }
22
-
23
- _cset(:keep_releases) { 3 }
24
-
25
- # uberspace presets
26
- set(:deploy_to) { "/var/www/virtual/#{user}/rails/#{application}" }
27
- set(:home) { "/home/#{user}" }
28
- set(:use_sudo) { false }
29
- set(:rvm_type) { :user }
30
- set(:rvm_install_ruby) { :install }
31
- set(:rvm_ruby_string) { "ree@rails-#{application}" }
32
-
33
- ssh_options[:forward_agent] = true
34
- default_run_options[:pty] = true
35
-
36
- # callbacks
37
- before 'deploy:setup', 'rvm:install_rvm'
38
- before 'deploy:setup', 'rvm:install_ruby'
39
- after 'deploy:setup', 'uberspace:setup_svscan'
40
- after 'deploy:setup', 'daemontools:setup_daemon'
41
- after 'deploy:setup', 'apache:setup_reverse_proxy'
42
- after 'deploy:setup', 'mysql:setup_database_and_config'
43
- after 'deploy:update_code', 'deploy:symlink_shared'
44
- after 'deploy', 'deploy:cleanup'
45
-
46
- # custom recipes
47
- namespace :uberspace do
48
- task :setup_svscan do
49
- run 'uberspace-setup-svscan ; echo 0'
50
- end
51
- end
52
-
53
- namespace :daemontools do
54
- task :setup_daemon do
55
- daemon_script = <<-EOF
56
- #!/bin/bash
57
- export HOME=#{fetch :home}
58
- source $HOME/.bash_profile
59
- cd #{fetch :deploy_to}/current
60
- rvm use #{fetch :rvm_ruby_string}
61
- exec bundle exec passenger start -p #{fetch :passenger_port} -e production 2>&1
62
- EOF
63
-
64
- log_script = <<-EOF
65
- #!/bin/sh
66
- exec multilog t ./main
67
- EOF
68
-
69
- run "mkdir -p #{fetch :home}/etc/run-rails-#{fetch :application}"
70
- run "mkdir -p #{fetch :home}/etc/run-rails-#{fetch :application}/log"
71
- put daemon_script, "#{fetch :home}/etc/run-rails-#{fetch :application}/run"
72
- put log_script, "#{fetch :home}/etc/run-rails-#{fetch :application}/log/run"
73
- run "chmod +x #{fetch :home}/etc/run-rails-#{fetch :application}/run"
74
- run "chmod +x #{fetch :home}/etc/run-rails-#{fetch :application}/log/run"
75
- run "ln -nfs #{fetch :home}/etc/run-rails-#{fetch :application} #{fetch :home}/service/rails-#{fetch :application}"
76
-
77
- end
78
- end
79
-
80
- namespace :apache do
81
- task :setup_reverse_proxy do
82
- htaccess = <<-EOF
83
- RewriteEngine On
84
- RewriteRule ^(.*)$ http://localhost:#{fetch :passenger_port}/$1 [P]
85
- EOF
86
- path = fetch(:domain) ? "/var/www/virtual/#{fetch :user}/#{fetch :domain}" : "#{fetch :home}/html"
87
- run "mkdir -p #{path}"
88
- put htaccess, "#{path}/.htaccess"
89
- end
90
- end
91
-
92
- namespace :mysql do
93
- task :setup_database_and_config do
94
- my_cnf = capture('cat ~/.my.cnf')
95
- config = {}
96
- %w(development production test).each do |env|
97
-
98
- config[env] = {
99
- 'adapter' => 'mysql2',
100
- 'encoding' => 'utf8',
101
- 'database' => "#{fetch :user}_rails_#{fetch :application}_#{env}",
102
- 'host' => 'localhost'
103
- }
104
-
105
- my_cnf.match(/^user=(\w+)/)
106
- config[env]['username'] = $1
107
-
108
- my_cnf.match(/^password=(\w+)/)
109
- config[env]['password'] = $1
110
-
111
- my_cnf.match(/^port=(\d+)/)
112
- config[env]['port'] = $1.to_i
113
-
114
- run "mysql -e 'CREATE DATABASE IF NOT EXISTS #{config[env]['database']} CHARACTER SET utf8 COLLATE utf8_general_ci;'"
115
- end
116
-
117
- run "mkdir -p #{fetch :shared_path}/config"
118
- put config.to_yaml, "#{fetch :shared_path}/config/database.yml"
119
-
120
- end
121
- end
122
-
123
- namespace :deploy do
124
- task :start do
125
- run "svc -u #{fetch :home}/service/rails-#{fetch :application}"
126
- end
127
- task :stop do
128
- run "svc -d #{fetch :home}/service/rails-#{fetch :application}"
129
- end
130
- task :restart do
131
- run "svc -du #{fetch :home}/service/rails-#{fetch :application}"
132
- end
133
-
134
- task :symlink_shared do
135
- run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
136
- end
137
- end
138
-
139
- end
1
+ require 'uberspacify/base'
2
+ require 'uberspacify/mysql'
@@ -1,3 +1,3 @@
1
1
  module Uberspacify
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.1"
3
3
  end
metadata CHANGED
@@ -1,185 +1,169 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: uberspacify
3
- version: !ruby/object:Gem::Version
4
- hash: 59
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 0
10
- version: 0.9.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jan Schulz-Hofen
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-08-07 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-08-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: capistrano
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 63
29
- segments:
30
- - 2
31
- - 12
32
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
33
21
  version: 2.12.0
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: capistrano_colors
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
40
25
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 1
45
- segments:
46
- - 0
47
- - 5
48
- - 5
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.12.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: capistrano_colors
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
49
37
  version: 0.5.5
50
38
  type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: rvm-capistrano
54
39
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.5.5
46
+ - !ruby/object:Gem::Dependency
47
+ name: rvm-capistrano
48
+ requirement: !ruby/object:Gem::Requirement
56
49
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 21
61
- segments:
62
- - 1
63
- - 2
64
- - 5
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
65
53
  version: 1.2.5
66
54
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: passenger
70
55
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
72
57
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 25
77
- segments:
78
- - 3
79
- - 0
80
- - 15
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.5
62
+ - !ruby/object:Gem::Dependency
63
+ name: passenger
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
81
69
  version: 3.0.15
82
70
  type: :runtime
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: rack
86
71
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
88
73
  none: false
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- hash: 5
93
- segments:
94
- - 1
95
- - 4
96
- - 1
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 3.0.15
78
+ - !ruby/object:Gem::Dependency
79
+ name: rack
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
97
85
  version: 1.4.1
98
86
  type: :runtime
99
- version_requirements: *id005
100
- - !ruby/object:Gem::Dependency
101
- name: daemon_controller
102
87
  prerelease: false
103
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.4.1
94
+ - !ruby/object:Gem::Dependency
95
+ name: daemon_controller
96
+ requirement: !ruby/object:Gem::Requirement
104
97
  none: false
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 23
109
- segments:
110
- - 1
111
- - 0
112
- - 0
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
113
101
  version: 1.0.0
114
102
  type: :runtime
115
- version_requirements: *id006
116
- - !ruby/object:Gem::Dependency
117
- name: mysql2
118
103
  prerelease: false
119
- requirement: &id007 !ruby/object:Gem::Requirement
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.0.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: mysql2
112
+ requirement: !ruby/object:Gem::Requirement
120
113
  none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- hash: 5
125
- segments:
126
- - 0
127
- - 3
128
- - 11
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
129
117
  version: 0.3.11
130
118
  type: :runtime
131
- version_requirements: *id007
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: 0.3.11
132
126
  description: Deploy Rails apps on Uberspace
133
- email:
127
+ email:
134
128
  - jan@launchco.com
135
129
  executables: []
136
-
137
130
  extensions: []
138
-
139
131
  extra_rdoc_files: []
140
-
141
- files:
132
+ files:
142
133
  - .gitignore
143
134
  - Gemfile
144
135
  - LICENSE
145
136
  - README.md
146
137
  - Rakefile
147
138
  - lib/uberspacify.rb
139
+ - lib/uberspacify/base.rb
140
+ - lib/uberspacify/mysql.rb
148
141
  - lib/uberspacify/recipes.rb
149
142
  - lib/uberspacify/version.rb
150
143
  - uberspacify.gemspec
151
- homepage: ""
144
+ homepage: ''
152
145
  licenses: []
153
-
154
146
  post_install_message:
155
147
  rdoc_options: []
156
-
157
- require_paths:
148
+ require_paths:
158
149
  - lib
159
- required_ruby_version: !ruby/object:Gem::Requirement
150
+ required_ruby_version: !ruby/object:Gem::Requirement
160
151
  none: false
161
- requirements:
162
- - - ">="
163
- - !ruby/object:Gem::Version
164
- hash: 3
165
- segments:
166
- - 0
167
- version: "0"
168
- required_rubygems_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
157
  none: false
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- hash: 3
174
- segments:
175
- - 0
176
- version: "0"
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
177
162
  requirements: []
178
-
179
163
  rubyforge_project:
180
164
  rubygems_version: 1.8.24
181
165
  signing_key:
182
166
  specification_version: 3
183
- summary: Uberspacify helps you deploy a Ruby on Rails app on Uberspace, a popular German shared hosting provider.
167
+ summary: Uberspacify helps you deploy a Ruby on Rails app on Uberspace, a popular
168
+ German shared hosting provider.
184
169
  test_files: []
185
-