easy-deployment 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,6 +1,21 @@
1
1
  # Changelog for easy-deployment
2
2
 
3
- ## 0.5.0 (unreleased)
3
+ ## 0.5.1 (2013-05-27)
4
+
5
+ Bugfixes:
6
+
7
+ * Backup gem requirements for rails 3.2.13 fixed: should be the same as the rails 4 ones, not earlier rails 3 releases
8
+ * Fixed `cap deploy:initial` for cases where the deploy stage name didn't match the rails_env name
9
+ * Fixed backup template not pulling the environment specific hash out of database config
10
+
11
+ New Features:
12
+
13
+ * Tail the rails log of your remote servers (either streaming live or the last N lines) `cap tail:live_logs` + `cap tail:recent logs`
14
+ * Load the capistrano rails assetpipeline support by default (can be skipped via generator option)
15
+ * Apache/passenger config template now sets `PassengerMinInstances` and provides some disabled example tuning options
16
+ * Specified license in the gemspec
17
+
18
+ ## 0.5.0 - 2013-04-05
4
19
 
5
20
  Large rewrite of both templates, and generator code.
6
21
 
@@ -3,7 +3,7 @@ require File.expand_path('../lib/easy-deployment/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Jeremy Olliver", "Nigel Ramsay", "Shevaun Coker", "Cameron Fowler"]
6
- gem.email = ["jeremy.olliver@abletech.co.nz", "nigel.ramsay@abletech.co.nz", "shevaun.coker@abletech.co.nz", "cameron.fowler@abletech.co.nz"]
6
+ gem.email = ["jeremy.olliver@abletech.co.nz", "nigel.ramsay@abletech.co.nz", "shevaun.coker@abletech.co.nz", "cameron.fowler@abletech.co.nz"]
7
7
  gem.description = %q{Easy deployment: includes a generator, and capistrano configuration}
8
8
  gem.summary = %q{Gem for encapsulating Abletech's deployment practices}
9
9
  gem.homepage = "https://github.com/AbleTech/easy-deployment"
@@ -14,6 +14,7 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "easy-deployment"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Easy::Deployment::VERSION
17
+ gem.license = "GPLv3"
17
18
 
18
19
  gem.add_runtime_dependency 'rails', '>= 3.0.0'
19
20
  gem.add_runtime_dependency 'capistrano', '~> 2.13.5'
@@ -1,5 +1,5 @@
1
1
  module Easy
2
2
  module Deployment
3
- VERSION = "0.5.0"
3
+ VERSION = "0.5.1"
4
4
  end
5
5
  end
@@ -43,7 +43,7 @@ Capistrano::Configuration.instance(:must_exist).load do
43
43
  when :latest then latest_release
44
44
  else raise ArgumentError, "unknown migration target #{migrate_target.inspect}"
45
45
  end
46
- run "cd #{directory}; RAILS_ENV=#{stage} bundle exec rake db:create"
46
+ run "cd #{directory}; RAILS_ENV=#{rails_env || stage} bundle exec rake db:create"
47
47
  end
48
48
 
49
49
  # By default, we deploy using passenger as an app server
@@ -63,7 +63,20 @@ Capistrano::Configuration.instance(:must_exist).load do
63
63
  end
64
64
  end
65
65
 
66
- desc "Tag the release by creating or moving a remote branch named after the current environment"
66
+ namespace :tail do
67
+ desc "Stream live log output. USAGE tail:live_logs"
68
+ task :live_logs, :roles => :app do
69
+ stream_output_from_command("tail -f #{shared_path}/log/#{rails_env}.log", true)
70
+ end
71
+
72
+ desc "Show recent log output. USAGE tail:recent_logs [lines=n] (defaults to 100)"
73
+ task :recent_logs, :roles => :app do
74
+ lines = ENV['lines'] || 100
75
+ stream_output_from_command("tail -n#{lines} #{shared_path}/log/#{rails_env}.log")
76
+ end
77
+ end
78
+
79
+ desc "[internal] Tag the release by creating or moving a remote branch named after the current environment"
67
80
  task :tag_release do
68
81
  if system("git branch -r | grep 'origin/releases/#{stage}'")
69
82
  system "git push origin :releases/#{stage}"
@@ -71,7 +84,7 @@ Capistrano::Configuration.instance(:must_exist).load do
71
84
  system "git push origin #{branch}:releases/#{stage}"
72
85
  end
73
86
 
74
- desc "Annotate release into version.txt"
87
+ desc "[internal] Annotate release into version.txt"
75
88
  task :annotate_release do
76
89
  git_revision = `git rev-parse #{branch} 2> /dev/null`.strip
77
90
  version_info = "Branch/Tag: #{branch}\\nRevision: #{git_revision}\\nDeployed To: #{stage}\\n\\nDeployed At: #{Time.now}\\nBy: #{`whoami`.chomp}\\n"
@@ -81,4 +94,18 @@ Capistrano::Configuration.instance(:must_exist).load do
81
94
  after "deploy:update", "tag_release"
82
95
  after "deploy:update", "annotate_release"
83
96
 
97
+
98
+ # Helper function to stream output colorized by host
99
+ def stream_output_from_command(cmd, continuous = false)
100
+ trap("INT") { puts 'Output cancelled'; exit 0; }
101
+ Capistrano::CLI.ui.say("<%= color('Streaming output Ctrl+c to cancel', :blue) %>") if continuous
102
+
103
+ run(cmd) do |channel, stream, data|
104
+ puts # for an extra line break before the host name
105
+ Capistrano::CLI.ui.say("<%= color('#{channel[:host]}', :cyan) %>: #{data}")
106
+ # puts "#{channel[:host]}: #{data}"
107
+ break if stream == :err
108
+ end
109
+ end
110
+
84
111
  end
@@ -11,18 +11,20 @@ module Easy
11
11
  def create_backup_files
12
12
  gem_group(:backup) do
13
13
  gem "whenever", :require => false
14
- case Rails::VERSION::MAJOR
15
- when 3
14
+ # Rails 3.2.12 and lower of the Rails 3.2 release series requires mail ~> 2.4.X which neccesitates an older version of backup
15
+ # We'll handle two cases: one for Rails 3.2.(0-12) and one for Rails 3.2.13 + Rails 4
16
+ if "3.2" == "#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}" && Rails::VERSION::STRING < "3.2.13"
16
17
  gem "backup", "~> 3.0.27", :require => false
17
18
  gem "fog", "~> 1.4.0", :require => false
18
19
  gem "mail", "~> 2.4.0", :require => false
19
- when 4
20
- gem "backup", "~> 3.1.3", :require => false
21
- gem "fog", "~> 1.9.0", :require => false
22
- gem "net-ssh", "<= 2.5.2", :require => false # Greater than >= 2.3.0 as well, though we can't express that
23
- gem "net-scp", "<= 1.0.4", :require => false # Greater than 1.0.0
24
- gem "excon", "~> 0.17.0", :require => false
25
- gem "mail", "~> 2.5.0", :require => false
20
+ elsif Rails::VERSION::STRING >= "3.2.13" && [3,4].include?(Rails::VERSION::MAJOR)
21
+ # Rails 3.2.13+ and Rails 4 only
22
+ gem "backup", "~> 3.1.3", :require => false
23
+ gem "fog", "~> 1.9.0", :require => false
24
+ gem "net-ssh", ['>= 2.3.0', '<= 2.5.2'], :require => false
25
+ gem "net-scp", ['>= 1.0.0', '<= 1.0.4'], :require => false
26
+ gem "excon", "~> 0.17.0", :require => false
27
+ gem "mail", "~> 2.5.0", :require => false
26
28
  else
27
29
  warn "Unsupported rails release detected. You'll need to manage your own dependencies for the backup gem"
28
30
  gem "backup", :require => false
@@ -6,23 +6,17 @@ module Easy
6
6
 
7
7
  include GeneratorHelpers
8
8
 
9
- INSTALL_MSG = %{
10
- Easy Deployment Config now setup!
11
-
12
- TODO:
13
- * Set the correct git repository in config/deploy.rb
14
- * Edit Capfile and enable asset pipeline compilation if you are using it (uncomment load 'deploy/assets')
15
- }
16
-
17
9
  desc %{Generates standard able technology deployment script using capistrano}
18
10
 
19
- class_option :stages, :type => :array, :default => ['staging', 'production'], :aliases => :s
20
- class_option :disable_backup, :type => :boolean, :default => false
21
- class_option :disable_bugsnag, :type => :boolean, :default => false
22
- class_option :disable_newrelic, :type => :boolean, :default => false
11
+ class_option :stages, :type => :array, :default => ['staging', 'production'], :aliases => :s
12
+ class_option :disable_backup, :type => :boolean, :default => false
13
+ class_option :disable_bugsnag, :type => :boolean, :default => false
14
+ class_option :disable_newrelic, :type => :boolean, :default => false
15
+ class_option :no_asset_pipeline, :type => :boolean, :default => false
23
16
 
24
17
  def create_deployment_files
25
18
  template("deploy.rb.tt", "config/deploy.rb") # Generate deploy.rb first to use ours not capistrano's deploy.rb
19
+ copy_file("Capfile") unless options[:no_asset_pipeline] # Do this first
26
20
  capify!
27
21
 
28
22
  # Generate all stages specified
@@ -30,7 +24,14 @@ TODO:
30
24
  generate("easy:stage", stage)
31
25
  end
32
26
 
33
- say(INSTALL_MSG, :green)
27
+ install_message = %Q(
28
+ Easy Deployment Config now setup!
29
+
30
+ TODO:
31
+ * Set the correct git repository in config/deploy.rb
32
+ #{"* Edit Capfile and enable asset pipeline compilation if you are using it (uncomment load 'deploy/assets')\n" if options[:no_asset_pipeline]})
33
+
34
+ say(install_message, :green)
34
35
  options[:stages].each do |stage|
35
36
  say(" * Set the ip address for staging in config/deploy/#{stage}.rb && the apache config in config/deploy/#{stage}/apache.conf", :green)
36
37
  end
@@ -0,0 +1,3 @@
1
+ load 'deploy'
2
+ load 'deploy/assets' # Load rails asset pipeline support
3
+ load 'config/deploy' # remove this line to skip loading any of the default tasks
@@ -13,7 +13,8 @@ Backup::Model.new("<%= application_name %>", "Remote Backup") do
13
13
  database_config_filename = "mongo.yml"
14
14
  end
15
15
  %>
16
- database_config = YAML.load_file(File.join(rails_root, "config/<%= database_config_filename %>"))
16
+ app_database_config = YAML.load_file(File.join(rails_root, "config/<%= database_config_filename %>"))
17
+ database_config = app_database_config[ENV['RAILS_ENV']]
17
18
 
18
19
  database <%= database_engine %> do |db|
19
20
  db.name = database_config["database"]
@@ -1,10 +1,16 @@
1
1
  <VirtualHost *:80>
2
- ServerName <%= name %>.<%= application_name %>.co.nz
2
+ ServerName <%= name %>.<%= application_name %>.co.nz
3
3
 
4
- DocumentRoot /var/apps/<%= application_name %>/current/public
5
- RailsEnv <%= name %>
6
- <Directory /var/apps/<%= application_name %>/current/public>
7
- AllowOverride all
8
- Options -MultiViews
9
- </Directory>
4
+ DocumentRoot /var/apps/<%= application_name %>/current/public
5
+ RackEnv <%= name %>
6
+
7
+ # Passenger tuning
8
+ PassengerMinInstances 1 # Prevent passenger going to sleep after 15min inactivity
9
+ # PassengerPreStart http://<%= name %>.<%= application_name %>.co.nz # Pre-load app on deploy. This needs to match the ServerName above
10
+ # PassengerHighPerformance on # If you don't need any apache mods within this VirtualHost, you may turn this on
11
+
12
+ <Directory /var/apps/<%= application_name %>/current/public>
13
+ AllowOverride all
14
+ Options -MultiViews
15
+ </Directory>
10
16
  </VirtualHost>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy-deployment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-04-05 00:00:00.000000000 Z
15
+ date: 2013-05-26 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rails
@@ -111,6 +111,7 @@ files:
111
111
  - lib/easy/generators/deployment_generator.rb
112
112
  - lib/easy/generators/generator_helpers.rb
113
113
  - lib/easy/generators/stage_generator.rb
114
+ - lib/easy/generators/templates/Capfile
114
115
  - lib/easy/generators/templates/backup.rb.tt
115
116
  - lib/easy/generators/templates/deploy.rb.tt
116
117
  - lib/easy/generators/templates/s3.yml
@@ -121,7 +122,8 @@ files:
121
122
  - spec/easy_deployment_spec.rb
122
123
  - spec/spec_helper.rb
123
124
  homepage: https://github.com/AbleTech/easy-deployment
124
- licenses: []
125
+ licenses:
126
+ - GPLv3
125
127
  post_install_message:
126
128
  rdoc_options: []
127
129
  require_paths: