capobvious 0.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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README +1 -0
- data/Rakefile +1 -0
- data/capobvious.gemspec +24 -0
- data/lib/capistrano/ext/capobvious.rb +299 -0
- metadata +51 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'capistrano/ext/capobvious'
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/capobvious.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
VERSION = "0.0.1"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "capobvious"
|
7
|
+
s.version = VERSION
|
8
|
+
s.authors = ["Dmitry Gruzd"]
|
9
|
+
s.email = ["donotsendhere@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Cap recipes}
|
12
|
+
s.description = %q{Capfile that we use every day}
|
13
|
+
|
14
|
+
s.rubyforge_project = "capobvious"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
end
|
@@ -0,0 +1,299 @@
|
|
1
|
+
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
|
2
|
+
require "rvm/capistrano"
|
3
|
+
|
4
|
+
Capistrano::Configuration.instance.load do
|
5
|
+
rvmrc = "rvm use #{rvm_ruby_string}"
|
6
|
+
set :rvm_type, :user
|
7
|
+
|
8
|
+
default_run_options[:pty] = true
|
9
|
+
ssh_options[:forward_agent] = true
|
10
|
+
|
11
|
+
unless exists?(:rails_env)
|
12
|
+
set :rails_env, "production"
|
13
|
+
end
|
14
|
+
unless exists?(:dbconf)
|
15
|
+
set :dbconf, "database.yml"
|
16
|
+
end
|
17
|
+
|
18
|
+
config = YAML::load(File.open("config/#{dbconf}"))
|
19
|
+
adapter = config[rails_env]["adapter"]
|
20
|
+
database = config[rails_env]["database"]
|
21
|
+
db_username = config[rails_env]["username"]
|
22
|
+
db_password = config[rails_env]["password"]
|
23
|
+
|
24
|
+
set :local_folder_path, "tmp/backup"
|
25
|
+
set :timestamp, Time.new.to_i.to_s
|
26
|
+
set :db_file_name, "#{database}-#{timestamp}.sql"
|
27
|
+
set :db_archive_ext, "7z"
|
28
|
+
|
29
|
+
|
30
|
+
after "deploy:symlink", "auto:run"
|
31
|
+
after "deploy:setup", "db:create", "nginx:conf"
|
32
|
+
namespace :auto do
|
33
|
+
task :run do
|
34
|
+
if exists?(:assets) && fetch(:assets) == true
|
35
|
+
assets.precompile
|
36
|
+
end
|
37
|
+
create.files
|
38
|
+
if exists?(:sphinx) && fetch(:sphinx) == true
|
39
|
+
sphinx.symlink
|
40
|
+
end
|
41
|
+
bundle.install
|
42
|
+
if exists?(:auto_migrate) && fetch(:auto_migrate) == true
|
43
|
+
deploy.migrate
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
namespace :create do
|
48
|
+
task :files do
|
49
|
+
create.rvmrc
|
50
|
+
if fetch(:dbconf) != 'database.yml'
|
51
|
+
create.database_yml
|
52
|
+
end
|
53
|
+
end
|
54
|
+
task :database_yml do
|
55
|
+
run "ln -sfv #{current_path}/config/#{dbconf} #{current_path}/config/database.yml"
|
56
|
+
end
|
57
|
+
desc "Create .rvmrc & files"
|
58
|
+
task :rvmrc do
|
59
|
+
put rvmrc, "#{current_path}/.rvmrc"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
namespace :db do
|
65
|
+
task :create do
|
66
|
+
run "echo \"create user #{db_username} with password '#{db_password}';\" | #{sudo} -u postgres psql"
|
67
|
+
run "echo \"create database #{database} owner #{db_username};\" | #{sudo} -u postgres psql"
|
68
|
+
end
|
69
|
+
task :seed do
|
70
|
+
run "cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} db:seed"
|
71
|
+
end
|
72
|
+
task :reset do
|
73
|
+
run "cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} db:reset"
|
74
|
+
end
|
75
|
+
task :import do
|
76
|
+
file_name = "#{db_file_name}.#{db_archive_ext}"
|
77
|
+
file_path = "#{local_folder_path}/#{file_name}"
|
78
|
+
system "cd #{local_folder_path} && 7z x #{file_name}"
|
79
|
+
system "echo \"drop database #{database}\" | sudo -u postgres psql"
|
80
|
+
system "echo \"create database #{database} owner #{db_username};\" | sudo -u postgres psql"
|
81
|
+
system "sudo -u postgres psql #{database} < #{local_folder_path}/#{db_file_name}"
|
82
|
+
system "rm -v #{local_folder_path}/#{db_file_name}"
|
83
|
+
end
|
84
|
+
task :pg_import do
|
85
|
+
backup.db
|
86
|
+
db.import
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
#==== PRIKHA-START ====
|
91
|
+
desc "Run custom task usage: cap run_rake_task TASK=patch:project_category"
|
92
|
+
task :run_rake_task do
|
93
|
+
if ENV.has_key?('TASK')
|
94
|
+
p "running rake task: #{ENV['TASK']}"
|
95
|
+
run "cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} #{ENV['TASK']}"
|
96
|
+
else
|
97
|
+
puts 'Please specify correct task: cap run_rake_task TASK= some_task'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
#==== PRIKHA-END ====
|
101
|
+
|
102
|
+
namespace :backup do
|
103
|
+
desc "Backup a database"
|
104
|
+
task :db do
|
105
|
+
file_name = fetch(:db_file_name)
|
106
|
+
archive_ext = fetch(:db_archive_ext)
|
107
|
+
dump_file_path = "#{shared_path}/backup/#{file_name}"
|
108
|
+
output_file = "#{dump_file_path}.#{archive_ext}"
|
109
|
+
require 'yaml'
|
110
|
+
run "mkdir -p #{shared_path}/backup"
|
111
|
+
if adapter == "postgresql"
|
112
|
+
run "pg_dump -U #{db_username} #{database} > #{dump_file_path}"
|
113
|
+
run "cd #{shared_path} && 7z a #{output_file} #{dump_file_path} && rm #{dump_file_path}"
|
114
|
+
else
|
115
|
+
puts "Cannot backup, adapter #{adapter} is not implemented for backup yet"
|
116
|
+
end
|
117
|
+
system "mkdir -p #{local_folder_path}"
|
118
|
+
download(output_file, "#{local_folder_path}/#{file_name}.#{archive_ext}")
|
119
|
+
end
|
120
|
+
desc "Backup public/system folder"
|
121
|
+
task :sys do
|
122
|
+
file_name = "#{application}-system-#{timestamp}.7z"
|
123
|
+
file_path = "#{shared_path}/backup/#{file_name}"
|
124
|
+
run "7z a #{file_path} #{shared_path}/system"
|
125
|
+
download(file_path, "#{local_folder_path}/#{file_name}")
|
126
|
+
end
|
127
|
+
desc "Clean backup folder"
|
128
|
+
task :clean do
|
129
|
+
run "rm -rfv #{shared_path}/backup/*"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
if exists?(:backup_db) && fetch(:backup_db) == true
|
133
|
+
before "deploy:update", "backup:db"
|
134
|
+
end
|
135
|
+
if exists?(:backup_sys) && fetch(:backup_sys) == true
|
136
|
+
before "deploy:update", "backup:sys"
|
137
|
+
end
|
138
|
+
|
139
|
+
namespace :assets do
|
140
|
+
desc "Assets precompile"
|
141
|
+
task :precompile do
|
142
|
+
if exists?(:assets) && fetch(:assets) == true
|
143
|
+
system("bundle exec rake assets:precompile && cd public && tar czf assets.tar.gz assets/")
|
144
|
+
upload("public/assets.tar.gz","#{current_path}/public/assets.tar.gz")
|
145
|
+
system("rm public/assets.tar.gz && rm -rf tmp/assets && mv public/assets tmp/assets")
|
146
|
+
run("cd #{current_path}/public && rm -rf assets/ && tar xzf assets.tar.gz && rm assets.tar.gz")
|
147
|
+
else
|
148
|
+
puts "assets is disabled in config/deploy.rb to enable add line set :assets, true"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
namespace :nginx do
|
154
|
+
task :restart do
|
155
|
+
run "#{sudo} /etc/init.d/nginx restart"
|
156
|
+
end
|
157
|
+
task :reload do
|
158
|
+
run "#{sudo} /etc/init.d/nginx reload"
|
159
|
+
end
|
160
|
+
task :start do
|
161
|
+
run "#{sudo} /etc/init.d/nginx start"
|
162
|
+
end
|
163
|
+
task :stop do
|
164
|
+
run "#{sudo} /etc/init.d/nginx stop"
|
165
|
+
end
|
166
|
+
desc "Add app nginx conf to server"
|
167
|
+
task :conf do
|
168
|
+
default_nginx_template = <<-EOF
|
169
|
+
server {
|
170
|
+
listen 80;
|
171
|
+
server_name #{server_name};
|
172
|
+
root #{current_path}/public;
|
173
|
+
location / {
|
174
|
+
try_files $uri @unicorn;
|
175
|
+
}
|
176
|
+
location @unicorn {
|
177
|
+
proxy_set_header Client-Ip $remote_addr;
|
178
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
179
|
+
proxy_set_header Host $host;
|
180
|
+
proxy_pass http://unix:#{shared_path}/pids/unicorn.sock;
|
181
|
+
}
|
182
|
+
}
|
183
|
+
EOF
|
184
|
+
if exists?(:server_redirect)
|
185
|
+
server_redirect = fetch(:server_redirect)#.split(" ")
|
186
|
+
redirect_template = <<-RED
|
187
|
+
server {
|
188
|
+
server_name #{server_redirect};
|
189
|
+
rewrite ^(.*)$ http://#{server_name}$1 permanent;
|
190
|
+
}
|
191
|
+
RED
|
192
|
+
default_nginx_template += redirect_template
|
193
|
+
end
|
194
|
+
|
195
|
+
puts default_nginx_template
|
196
|
+
|
197
|
+
if exists?(:server_name)
|
198
|
+
#location = fetch(:template_dir, "config") + '/nginx.conf.erb'
|
199
|
+
#template = File.file?(location) ? File.read(location) : default_nginx_template
|
200
|
+
config = ERB.new(default_nginx_template)
|
201
|
+
# puts config.result
|
202
|
+
put config.result(binding), "#{shared_path}/nginx.conf"
|
203
|
+
run "#{sudo} ln -sfv #{shared_path}/nginx.conf /etc/nginx/sites-enabled/#{application}"
|
204
|
+
else
|
205
|
+
puts "Aborting because :server_name is not setted in deploy.rb"
|
206
|
+
end
|
207
|
+
end
|
208
|
+
desc "Del nginx config"
|
209
|
+
task :delconf do
|
210
|
+
run "#{sudo} rm -v /etc/nginx/sites-enabled/#{application}"
|
211
|
+
end
|
212
|
+
end
|
213
|
+
after "nginx:conf", "nginx:reload"
|
214
|
+
after "nginx:delconf", "nginx:reload"
|
215
|
+
|
216
|
+
|
217
|
+
namespace :bundle do
|
218
|
+
desc "Run bundle install"
|
219
|
+
task :install do
|
220
|
+
without = ['development','test','production']-[rails_env]
|
221
|
+
run "cd #{current_path} && bundle install --without #{without.join(" ")}"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
namespace :log do
|
226
|
+
desc "tail -f production.log"
|
227
|
+
task :tail do
|
228
|
+
stream("tail -f -n 0 #{current_path}/log/production.log")
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
namespace :install do
|
236
|
+
desc "Install apt-nyaa"
|
237
|
+
task :aptnyaa do
|
238
|
+
run "#{sudo} apt-get --assume-yes install wget > /dev/null 2>&1 && cd /usr/bin/ && #{sudo} wget -Nq https://raw.github.com/nyaa/UbuntuScript/master/apt-nyaa && #{sudo} chmod +x apt-nyaa"
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
|
243
|
+
namespace :sphinx do
|
244
|
+
desc "Rebuild indexes"
|
245
|
+
task :rebuild, :roles => :app, :except => {:no_release => true} do
|
246
|
+
run "cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} ts:rebuild"
|
247
|
+
end
|
248
|
+
desc "Sphinx start"
|
249
|
+
task :start, :roles => :app, :except => {:no_release => true} do
|
250
|
+
run "cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} ts:start"
|
251
|
+
end
|
252
|
+
desc "Sphinx stop"
|
253
|
+
task :stop, :roles => :app, :except => {:no_release => true} do
|
254
|
+
run "cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} ts:stop"
|
255
|
+
end
|
256
|
+
desc "Sphinx configure"
|
257
|
+
task :stop, :roles => :app, :except => {:no_release => true} do
|
258
|
+
run "cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} ts:conf"
|
259
|
+
end
|
260
|
+
desc "Re-establish symlinks"
|
261
|
+
task :symlink do
|
262
|
+
if exists?(:sphinx) && fetch(:sphinx) == true
|
263
|
+
run "mkdir -pv #{shared_path}/sphinx"
|
264
|
+
run "rm -rf #{release_path}/db/sphinx && ln -sfv #{shared_path}/sphinx #{release_path}/db/sphinx"
|
265
|
+
run "ln -sfv #{shared_path}/sphinx/#{rails_env}.sphinx.conf #{release_path}/config/#{rails_env}.sphinx.conf"
|
266
|
+
else
|
267
|
+
puts "sphinx is disabled in config/deploy.rb to enable add line set :sphinx, true"
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
|
273
|
+
|
274
|
+
set :unicorn_conf, "#{current_path}/config/unicorn.rb"
|
275
|
+
set :unicorn_pid, "#{shared_path}/pids/unicorn.pid"
|
276
|
+
namespace :unicorn do
|
277
|
+
desc "start unicorn"
|
278
|
+
task :start do
|
279
|
+
run "cd #{current_path} && bundle exec unicorn -c #{unicorn_conf} -E #{rails_env} -D"
|
280
|
+
end
|
281
|
+
desc "stop unicorn"
|
282
|
+
#task :stop, :roles => :app, :except => {:no_release => true} do
|
283
|
+
task :stop do
|
284
|
+
run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -QUIT `cat #{unicorn_pid}`; fi"
|
285
|
+
end
|
286
|
+
desc "restart unicorn"
|
287
|
+
task :restart do
|
288
|
+
puts "Restarting unicorn"
|
289
|
+
unicorn.stop
|
290
|
+
unicorn.start
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
namespace :deploy do
|
295
|
+
task :restart do
|
296
|
+
unicorn.restart
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capobvious
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dmitry Gruzd
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-21 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Capfile that we use every day
|
15
|
+
email:
|
16
|
+
- donotsendhere@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- README
|
24
|
+
- Rakefile
|
25
|
+
- capobvious.gemspec
|
26
|
+
- lib/capistrano/ext/capobvious.rb
|
27
|
+
homepage: ''
|
28
|
+
licenses: []
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project: capobvious
|
47
|
+
rubygems_version: 1.8.15
|
48
|
+
signing_key:
|
49
|
+
specification_version: 3
|
50
|
+
summary: Cap recipes
|
51
|
+
test_files: []
|