le1t0-capistrano 2.5.18.001 → 2.5.18.002

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -7,3 +7,5 @@ pkg
7
7
  *.sh
8
8
  .DS_Store
9
9
  capistrano.gemspec
10
+ le1t0-capistrano.gemspec
11
+ pkg/*
data/CHANGELOG CHANGED
@@ -1,3 +1,18 @@
1
+ == 2.5.18.002 / May 18, 2010
2
+
3
+ Various fixes and additions:
4
+
5
+ * Add database rollback
6
+ * Fix deploy:migrations such that it works with bundler (having bundler_gems in shared dir)
7
+ * Modified control tasks for passenger
8
+ * Modify deploy:cold (only code) and added deploy:cold:migrations + add variable stating whether or not cold deploy is run
9
+ * Modify upload task so it reloads the app + add revert task and upload/revert tasks for uploading i18n files
10
+ * Modified deploy:web:disable such that it only copies public/maintenance.html to public/system/maintenance.html
11
+
12
+ == 2.5.18.001 / April 19, 2010
13
+
14
+ Fixed transfer methods (get, put, etc) not honoring dry-run.
15
+
1
16
  == 2.5.18 / March 14, 2010
2
17
 
3
18
  Small fix for rolling back if a shell scripts exits non-zero; enabled a rollback if git (or other) externals fail during the deploy.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.5.18.001
1
+ 2.5.18.002
@@ -23,6 +23,7 @@ _cset(:repository) { abort "Please specify the repository that houses your appl
23
23
 
24
24
  _cset :scm, :subversion
25
25
  _cset :deploy_via, :checkout
26
+ _cset :running_cold_deploy, false
26
27
 
27
28
  _cset(:deploy_to) { "/u/apps/#{application}" }
28
29
  _cset(:revision) { source.head }
@@ -68,6 +69,9 @@ _cset(:run_method) { fetch(:use_sudo, true) ? :sudo : :run }
68
69
  # standalone case, or during deployment.
69
70
  _cset(:latest_release) { exists?(:deploy_timestamped) ? release_path : current_release }
70
71
 
72
+ # set i18n languages used by your rails app, comma separated
73
+ _cset :rails_languages, "en"
74
+
71
75
  # =========================================================================
72
76
  # These are helper methods that will be available to your recipes.
73
77
  # =========================================================================
@@ -291,29 +295,25 @@ namespace :deploy do
291
295
  abort "Please specify at least one file or directory to update (via the FILES environment variable)" if files.empty?
292
296
 
293
297
  files.each { |file| top.upload(file, File.join(current_path, file)) }
298
+ top.deploy.restart unless (ENV['NO_RESTART'] || "").downcase == 'true'
294
299
  end
295
300
 
296
- desc <<-DESC
297
- Restarts your application. This works by calling the script/process/reaper \
298
- script under the current path.
299
-
300
- If you are deploying a Rails 2.3.x application, you will need to install
301
- these http://github.com/rails/irs_process_scripts (more info about why
302
- on that page.)
303
-
304
- By default, this will be invoked via sudo as the `app' user. If \
305
- you wish to run it as a different user, set the :runner variable to \
306
- that user. If you are in an environment where you can't use sudo, set \
307
- the :use_sudo variable to false:
308
-
309
- set :use_sudo, false
310
- DESC
301
+ desc "Restarts your application."
311
302
  task :restart, :roles => :app, :except => { :no_release => true } do
312
- warn "[DEPRECATED] `deploy:restart` is going to be changed to Passenger mod_rails' method after 2.5.9 - see http://is.gd/2BPeA"
313
- try_runner "#{current_path}/script/process/reaper"
303
+ run "touch #{current_path}/tmp/restart.txt"
314
304
  end
315
305
 
316
306
  namespace :rollback do
307
+ before 'deploy:rollback:revision', 'deploy:rollback:db'
308
+ desc "Rolls back database to migration level of the previously deployed release"
309
+ task :db, :roles => :db, :only => { :primary => true } do
310
+ if previous_release
311
+ run "cd #{current_path}; rake RAILS_ENV=#{rails_env} db:migrate VERSION=`cd #{File.join(previous_release, 'db', 'migrate')} && ls -1 [0-9]*_*.rb | sort | tail -1 | sed -e s/_.*$//`"
312
+ else
313
+ abort "could not rollback the db because there is no prior release"
314
+ end
315
+ end
316
+
317
317
  desc <<-DESC
318
318
  [internal] Points the current symlink at the previous revision.
319
319
  This is called by the rollback sequence, and should rarely (if
@@ -398,10 +398,11 @@ namespace :deploy do
398
398
  because migrations are not guaranteed to be reversible.
399
399
  DESC
400
400
  task :migrations do
401
- set :migrate_target, :latest
401
+ # when using bundler, symlink has to run before migrate (unless you want to fully rebundle each deployment)
402
+ set :migrate_target, :current
402
403
  update_code
403
- migrate
404
404
  symlink
405
+ migrate
405
406
  restart
406
407
  end
407
408
 
@@ -465,51 +466,34 @@ namespace :deploy do
465
466
  end
466
467
  end
467
468
 
468
- desc <<-DESC
469
- Deploys and starts a `cold' application. This is useful if you have not \
470
- deployed your application before, or if your application is (for some \
471
- other reason) not currently running. It will deploy the code, run any \
472
- pending migrations, and then instead of invoking `deploy:restart', it will \
473
- invoke `deploy:start' to fire up the application servers.
474
- DESC
475
- task :cold do
476
- update
477
- migrate
478
- start
469
+ namespace :cold do
470
+
471
+ desc <<-DESC
472
+ Deploys a `cold' application. It will deploy the code.
473
+ DESC
474
+ task :default do
475
+ set :running_cold_deploy, true
476
+ update
477
+ end
478
+
479
+ desc <<-DESC
480
+ Deploys a `cold' application. It will deploy the code and run any \
481
+ pending migrations.
482
+ DESC
483
+ task :migrations do
484
+ set :running_cold_deploy, true
485
+ update
486
+ migrate
487
+ end
488
+
479
489
  end
480
490
 
481
- desc <<-DESC
482
- Start the application servers. This will attempt to invoke a script \
483
- in your application called `script/spin', which must know how to start \
484
- your application listeners. For Rails applications, you might just have \
485
- that script invoke `script/process/spawner' with the appropriate \
486
- arguments.
487
-
488
- By default, the script will be executed via sudo as the `app' user. If \
489
- you wish to run it as a different user, set the :runner variable to \
490
- that user. If you are in an environment where you can't use sudo, set \
491
- the :use_sudo variable to false.
492
- DESC
491
+ desc "This does nothing, but is here for backwards compatibility."
493
492
  task :start, :roles => :app do
494
- warn "[DEPRECATED] `deploy:start` is going to be removed after 2.5.9 - see http://is.gd/2BPeA"
495
- run "cd #{current_path} && #{try_runner} nohup script/spin"
496
493
  end
497
494
 
498
- desc <<-DESC
499
- Stop the application servers. This will call script/process/reaper for \
500
- both the spawner process, and all of the application processes it has \
501
- spawned. As such, it is fairly Rails specific and may need to be \
502
- overridden for other systems.
503
-
504
- By default, the script will be executed via sudo as the `app' user. If \
505
- you wish to run it as a different user, set the :runner variable to \
506
- that user. If you are in an environment where you can't use sudo, set \
507
- the :use_sudo variable to false.
508
- DESC
495
+ desc "This does nothing, but is here for backwards compatibility."
509
496
  task :stop, :roles => :app do
510
- warn "[DEPRECATED] `deploy:start` is going to be removed after 2.5.9 - see http://is.gd/2BPeA"
511
- run "if [ -f #{current_path}/tmp/pids/dispatch.spawner.pid ]; then #{try_runner} #{current_path}/script/process/reaper -a kill -r dispatch.spawner.pid; fi"
512
- try_runner "#{current_path}/script/process/reaper -a kill"
513
497
  end
514
498
 
515
499
  namespace :pending do
@@ -540,40 +524,16 @@ namespace :deploy do
540
524
  servers must be configured to detect the presence of this file, and if \
541
525
  it is present, always display it instead of performing the request.
542
526
 
543
- By default, the maintenance page will just say the site is down for \
544
- "maintenance", and will be back "shortly", but you can customize the \
545
- page by specifying the REASON and UNTIL environment variables:
546
-
547
- $ cap deploy:web:disable \\
548
- REASON="hardware upgrade" \\
549
- UNTIL="12pm Central Time"
550
-
551
- Further customization will require that you write your own task.
527
+ This just copies public/maintenance.html to public/system/maintenance.html.
528
+ Use a before hook to generate/initialize the public/maintenance.html if you
529
+ want it to contain dynamic information.
552
530
  DESC
553
531
  task :disable, :roles => :web, :except => { :no_release => true } do
554
532
  require 'erb'
555
- on_rollback { run "rm #{shared_path}/system/maintenance.html" }
533
+ on_rollback { run "rm -f #{shared_path}/system/maintenance.html" }
556
534
 
557
- warn <<-EOHTACCESS
558
-
559
- # Please add something like this to your site's htaccess to redirect users to the maintenance page.
560
- # More Info: http://www.shiftcommathree.com/articles/make-your-rails-maintenance-page-respond-with-a-503
561
-
562
- ErrorDocument 503 /system/maintenance.html
563
- RewriteEngine On
564
- RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png)$
565
- RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
566
- RewriteCond %{SCRIPT_FILENAME} !maintenance.html
567
- RewriteRule ^.*$ - [redirect=503,last]
568
- EOHTACCESS
569
-
570
- reason = ENV['REASON']
571
- deadline = ENV['UNTIL']
572
-
573
- template = File.read(File.join(File.dirname(__FILE__), "templates", "maintenance.rhtml"))
574
- result = ERB.new(template).result(binding)
575
-
576
- put result, "#{shared_path}/system/maintenance.html", :mode => 0644
535
+ run "cp #{current_path}/public/maintenance.html #{current_path}/public/system/maintenance.html"
536
+ run "chmod 644 #{current_path}/public/system/maintenance.html"
577
537
  end
578
538
 
579
539
  desc <<-DESC
@@ -586,4 +546,35 @@ namespace :deploy do
586
546
  run "rm #{shared_path}/system/maintenance.html"
587
547
  end
588
548
  end
549
+
550
+ namespace :hack do
551
+ desc "upload ymls to server from local checked out branch, CAUTION: can break the server!"
552
+ task :upload_ymls do
553
+ (ENV["LANGUAGES"] || rails_languages).split(',').each do |lang|
554
+ if File.exists?("config/locales/#{lang}.yml")
555
+ buffer = File.read("config/locales/#{lang}.yml")
556
+ put buffer, "#{current_path}/config/locales/#{lang}.yml", :mode => 0644
557
+ end
558
+ end
559
+ top.deploy.restart unless (ENV['NO_RESTART'] || "").downcase == 'true'
560
+ end
561
+
562
+ desc "revert changed ymls on server, not to be used on test!"
563
+ task :revert_ymls do
564
+ (ENV["LANGUAGES"] || rails_languages).split(',').each do |lang|
565
+ run "cd #{current_path}/config/locales/ ; git checkout #{lang}.yml"
566
+ end
567
+ top.deploy.restart unless (ENV['NO_RESTART'] || "").downcase == 'true'
568
+ end
569
+
570
+ desc "revert uploaded/changed files on server"
571
+ task :revert do
572
+ abort "You have to specify the files to revert in env var FILES (comma separated)" unless ENV['FILES']
573
+
574
+ ENV['FILES'].split(',').each do |file|
575
+ run "cd #{current_path} ; git checkout #{file}"
576
+ end
577
+ top.deploy.restart unless (ENV['NO_RESTART'] || "").downcase == 'true'
578
+ end
579
+ end
589
580
  end
metadata CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
6
6
  - 2
7
7
  - 5
8
8
  - 18
9
- - 1
10
- version: 2.5.18.001
9
+ - 2
10
+ version: 2.5.18.002
11
11
  platform: ruby
12
12
  authors:
13
13
  - Le1t0