capobvious 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/unicorn.rb ADDED
@@ -0,0 +1,43 @@
1
+ # -*- encoding : utf-8 -*-
2
+ APP_PATH = File.expand_path(File.dirname(File.dirname(__FILE__)))
3
+ SHARED_PATH = File.expand_path(APP_PATH+"/../shared")
4
+
5
+ working_directory APP_PATH
6
+
7
+ pid_file = SHARED_PATH + "/pids/unicorn.pid"
8
+ socket_file= SHARED_PATH + "/pids/unicorn.sock"
9
+ log_file = APP_PATH + "/log/unicorn.log"
10
+ err_log = APP_PATH + "/log/unicorn.stderr.log"
11
+ old_pid = pid_file + '.oldbin'
12
+
13
+
14
+ timeout 30
15
+ worker_processes 4
16
+ preload_app true
17
+ listen socket_file, :backlog => 1024
18
+ pid pid_file
19
+ stderr_path err_log
20
+ stdout_path log_file
21
+
22
+ GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
23
+
24
+
25
+ before_exec do |server|
26
+ ENV["BUNDLE_GEMFILE"] = "#{APP_PATH}/Gemfile"
27
+ end
28
+
29
+ before_fork do |server, worker|
30
+ defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect!
31
+
32
+ if File.exists?(old_pid) && server.pid != old_pid
33
+ begin
34
+ #sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
35
+ Process.kill("QUIT", File.read(old_pid).to_i)
36
+ rescue Errno::ENOENT, Errno::ESRCH
37
+ end
38
+ end
39
+ end
40
+
41
+ after_fork do |server, worker|
42
+ defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
43
+ end
@@ -54,16 +54,51 @@ Capistrano::Configuration.instance.load do
54
54
 
55
55
 
56
56
  #after "deploy:symlink", "auto:run"
57
- before "deploy:restart", "auto:run"
58
57
  #after "deploy:setup", "db:create", "nginx:conf", "install:p7zip"
59
58
 
60
- #load 'deploy/assets'
59
+ # load 'deploy/assets'
60
+
61
+ after 'deploy:update_code', 'bundle:install', 'assets:precompile'
62
+ before 'deploy:finalize_update', 'assets:symlink'
63
+ before "deploy:restart", "auto:run"
64
+
65
+ namespace :assets do
66
+ desc "Local Assets precompile"
67
+ task :local_precompile do
68
+ system("bundle exec rake assets:precompile && cd public && tar czf assets.tar.gz assets/")
69
+ upload("public/assets.tar.gz","#{current_path}/public/assets.tar.gz")
70
+ system("rm public/assets.tar.gz && rm -rf tmp/assets && mv public/assets tmp/assets")
71
+ run("cd #{current_path}/public && rm -rf assets/ && tar xzf assets.tar.gz && rm assets.tar.gz")
72
+ end
73
+ desc "Assets precompile"
74
+ task :precompile, :roles => :web, :except => { :no_release => true } do
75
+ run("cd #{latest_release} && bundle exec rake RAILS_ENV=#{rails_env} RAILS_GROUPS=assets assets:precompile")
76
+ end
77
+ task :symlink, :roles => :web, :except => { :no_release => true } do
78
+ run <<-CMD
79
+ rm -rf #{latest_release}/public/assets &&
80
+ mkdir -p #{latest_release}/public &&
81
+ mkdir -p #{shared_path}/assets &&
82
+ ln -s #{shared_path}/assets #{latest_release}/public/assets
83
+ CMD
84
+ end
85
+ end
86
+
87
+ namespace :bundle do
88
+ desc "Run bundle install"
89
+ task :install do
90
+ deployment = "--deployment --quiet"
91
+ without = ['development','test','production']-[rails_env]
92
+ run "cd #{latest_release} && bundle install --without #{without.join(" ")}"
93
+ end
94
+ end
95
+
61
96
  namespace :auto do
62
97
  task :run do
63
- bundle.install
64
- if exists?(:assets) && fetch(:assets) == true
65
- assets.precompile
66
- end
98
+ # bundle.install
99
+ # if exists?(:assets) && fetch(:assets) == true
100
+ # assets.precompile
101
+ # end
67
102
  create.files
68
103
  if exists?(:sphinx) && fetch(:sphinx) == true
69
104
  sphinx.symlink
@@ -215,19 +250,6 @@ Capistrano::Configuration.instance.load do
215
250
  before "deploy:update", "backup:sys"
216
251
  end
217
252
 
218
- namespace :assets do
219
- desc "Local Assets precompile"
220
- task :precompile do
221
- system("bundle exec rake assets:precompile && cd public && tar czf assets.tar.gz assets/")
222
- upload("public/assets.tar.gz","#{current_path}/public/assets.tar.gz")
223
- system("rm public/assets.tar.gz && rm -rf tmp/assets && mv public/assets tmp/assets")
224
- run("cd #{current_path}/public && rm -rf assets/ && tar xzf assets.tar.gz && rm assets.tar.gz")
225
- end
226
- desc "Assets precompile"
227
- task :remote_precompile, :roles => :web, :except => { :no_release => true } do
228
- run("cd #{current_path} && bundle exec rake RAILS_ENV=#{rails_env} assets:precompile")
229
- end
230
- end
231
253
 
232
254
  namespace :nginx do
233
255
  [:stop, :start, :restart, :reload].each do |action|
@@ -306,14 +328,6 @@ Capistrano::Configuration.instance.load do
306
328
  after "nginx:delconf", "nginx:reload"
307
329
 
308
330
 
309
- namespace :bundle do
310
- desc "Run bundle install"
311
- task :install do
312
- deployment = "--deployment --quiet"
313
- without = ['development','test','production']-[rails_env]
314
- run "cd #{current_path} && bundle install --without #{without.join(" ")}"
315
- end
316
- end
317
331
 
318
332
  namespace :log do
319
333
  desc "tail -f production.log"
@@ -378,25 +392,59 @@ Capistrano::Configuration.instance.load do
378
392
 
379
393
 
380
394
 
381
-
395
+ # Check if remote file exists
396
+ #
397
+ def remote_file_exists?(full_path)
398
+ 'true' == capture("if [ -e #{full_path} ]; then echo 'true'; fi").strip
399
+ end
400
+
401
+ # Check if process is running
402
+ #
403
+ def remote_process_exists?(pid_file)
404
+ capture("ps -p $(cat #{pid_file}) ; true").strip.split("\n").size == 2
405
+ end
382
406
 
383
407
  set :unicorn_conf, "#{current_path}/config/unicorn.rb"
384
408
  set :unicorn_pid, "#{shared_path}/pids/unicorn.pid"
385
409
  namespace :unicorn do
386
410
  desc "start unicorn"
387
411
  task :start do
412
+ if remote_file_exists?(unicorn_pid)
413
+ if remote_process_exists?(unicorn_pid)
414
+ logger.important("Unicorn is already running!", "Unicorn")
415
+ next
416
+ else
417
+ run "rm #{unicorn_pid}"
418
+ end
419
+ end
420
+ logger.important("Starting...", "Unicorn")
388
421
  run "cd #{current_path} && bundle exec unicorn -c #{unicorn_conf} -E #{rails_env} -D"
389
422
  end
390
423
  desc "stop unicorn"
391
424
  #task :stop, :roles => :app, :except => {:no_release => true} do
392
425
  task :stop do
393
- run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -QUIT `cat #{unicorn_pid}`; fi"
426
+ if remote_file_exists?(unicorn_pid)
427
+ if remote_process_exists?(unicorn_pid)
428
+ logger.important("Stopping...", "Unicorn")
429
+ run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -QUIT `cat #{unicorn_pid}`; fi"
430
+ else
431
+ run "rm #{unicorn_pid}"
432
+ logger.important("Unicorn is not running.", "Unicorn")
433
+ end
434
+ else
435
+ logger.important("No PIDs found. Check if unicorn is running.", "Unicorn")
436
+ end
394
437
  end
395
438
  desc "restart unicorn"
396
439
  task :restart do
397
- puts "Restarting unicorn"
398
- unicorn.stop
399
- unicorn.start
440
+ remote_file_exists = capture("ps -p $(cat #{unicorn_pid}) ; true").strip.split("\n").size == 2
441
+ if remote_file_exists
442
+ logger.important("Stopping...", "Unicorn")
443
+ run "#{try_sudo} kill -s USR2 `cat #{unicorn_pid}`"
444
+ else
445
+ logger.important("No PIDs found. Starting Unicorn server...", "Unicorn")
446
+ run "cd #{current_path} && bundle exec unicorn -c #{unicorn_conf} -E #{rails_env} -D"
447
+ end
400
448
  end
401
449
  end
402
450
 
@@ -1,3 +1,3 @@
1
1
  module Capobvious
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capobvious
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-04 00:00:00.000000000 Z
12
+ date: 2012-04-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
16
- requirement: &70320442844280 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,12 +21,18 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70320442844280
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  description: Capfile that we use every day
26
31
  email:
27
32
  - donotsendhere@gmail.com
28
33
  executables:
29
34
  - capobvious
35
+ - unicorn.rb
30
36
  extensions: []
31
37
  extra_rdoc_files: []
32
38
  files:
@@ -35,6 +41,7 @@ files:
35
41
  - README.markdown
36
42
  - Rakefile
37
43
  - bin/capobvious
44
+ - bin/unicorn.rb
38
45
  - capobvious.gemspec
39
46
  - lib/capistrano/ext/capobvious.rb
40
47
  - lib/capobvious/version.rb
@@ -58,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
65
  version: '0'
59
66
  requirements: []
60
67
  rubyforge_project: capobvious
61
- rubygems_version: 1.8.15
68
+ rubygems_version: 1.8.19
62
69
  signing_key:
63
70
  specification_version: 3
64
71
  summary: Cap recipes