capistrano-recipes 0.4.1 → 0.5.0

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/README.rdoc CHANGED
@@ -7,18 +7,34 @@ Useful Capistrano recipes including:
7
7
  * Log rotation and tailing commands
8
8
  * Restart and profile Phusion Passenger application server
9
9
 
10
+ ==Included Tasks
11
+
12
+ * cap db:create_yaml
13
+ * cap db:mysql:setup
14
+ * cap log:rotate
15
+ * cap log:tail
16
+ * cap passenger:bounce
17
+ * cap passenger:memory
18
+ * cap passenger:status
19
+ * cap symlink:create_shared_dirs
20
+ * cap symlink:shared_config_files
21
+ * cap symlink:shared_directories
22
+
10
23
  ==Installation
11
24
 
12
25
  Easy as pie...
13
26
 
14
- Ensure you have the Capistrano and Capistrano extensions gems installed:
27
+ Ensure you have the Capistrano gem installed:
15
28
 
16
29
  sudo gem install capistrano
30
+
31
+ Optionally install the Capistrano extensions gem to give you multistage support:
32
+
17
33
  sudo gem install capistrano-ext
18
34
 
19
35
  Install this gem:
20
36
 
21
- sudo gem install webficient-capistrano-recipes --source=http://gems.github.com
37
+ sudo gem install capistrano-recipes --source=http://gemcutter.com
22
38
 
23
39
  To setup the initial Capistrano deploy file, go to your Rails app folder via command line and enter:
24
40
 
@@ -27,6 +43,7 @@ To setup the initial Capistrano deploy file, go to your Rails app folder via com
27
43
  Inside the newly created config/deploy.rb, add:
28
44
 
29
45
  require 'capistrano_recipes'
46
+ require 'capistrano/ext/multistage' # only require if you've installed Cap ext gem
30
47
 
31
48
  If you're running Phusion Passenger (http://www.modrails.com) be sure you add this line to config/deploy.rb:
32
49
 
data/Rakefile CHANGED
@@ -11,7 +11,6 @@ begin
11
11
  gem.homepage = "http://github.com/webficient/capistrano-recipes"
12
12
  gem.authors = ["Phil Misiowiec"]
13
13
  gem.add_dependency('capistrano', ['>= 2.5.9'])
14
- gem.add_dependency('capistrano-ext', ['>= 1.2.1'])
15
14
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
15
  end
17
16
  rescue LoadError
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 1
2
+ :patch: 0
3
3
  :major: 0
4
- :minor: 4
4
+ :minor: 5
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{capistrano-recipes}
8
- s.version = "0.4.1"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Phil Misiowiec"]
12
- s.date = %q{2009-09-29}
12
+ s.date = %q{2009-10-01}
13
13
  s.description = %q{Extend the Capistrano gem with these useful recipes}
14
14
  s.email = %q{phil@webficient.com}
15
15
  s.extra_rdoc_files = [
@@ -43,13 +43,10 @@ Gem::Specification.new do |s|
43
43
 
44
44
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
45
  s.add_runtime_dependency(%q<capistrano>, [">= 2.5.9"])
46
- s.add_runtime_dependency(%q<capistrano-ext>, [">= 1.2.1"])
47
46
  else
48
47
  s.add_dependency(%q<capistrano>, [">= 2.5.9"])
49
- s.add_dependency(%q<capistrano-ext>, [">= 1.2.1"])
50
48
  end
51
49
  else
52
50
  s.add_dependency(%q<capistrano>, [">= 2.5.9"])
53
- s.add_dependency(%q<capistrano-ext>, [">= 1.2.1"])
54
51
  end
55
52
  end
@@ -1,6 +1,5 @@
1
1
  require 'capistrano'
2
2
  require 'capistrano/cli'
3
- require 'capistrano/ext/multistage'
4
3
  require 'helpers'
5
4
 
6
5
  Dir.glob(File.join(File.dirname(__FILE__), '/recipes/*.rb')).each { |f| load f }
data/lib/helpers.rb CHANGED
@@ -2,8 +2,22 @@
2
2
  # These are helper methods that will be available to your recipes.
3
3
  # =========================================================================
4
4
 
5
+ # automatically sets the environment based on presence of
6
+ # :stage (multistage gem), :rails_env, or RAILS_ENV variable; otherwise defaults to 'production'
7
+ def environment
8
+ if exists?(:stage)
9
+ stage
10
+ elsif exists?(:rails_env)
11
+ rails_env
12
+ elsif(ENV['RAILS_ENV'])
13
+ ENV['RAILS_ENV']
14
+ else
15
+ "production"
16
+ end
17
+ end
18
+
5
19
  # Execute a rake task, example:
6
20
  # run_rake log:clear
7
21
  def run_rake(task)
8
- run "cd #{current_path} && rake #{task} RAILS_ENV=#{stage}"
22
+ run "cd #{current_path} && rake #{task} RAILS_ENV=#{environment}"
9
23
  end
data/lib/recipes/db.rb CHANGED
@@ -23,8 +23,8 @@ Capistrano::Configuration.instance(:must_exist).load do
23
23
 
24
24
  desc "Create database.yml in shared path with settings for current stage and test env"
25
25
  task :create_yaml do
26
- set(:db_user) { Capistrano::CLI.ui.ask "Enter #{stage} database username:" }
27
- set(:db_pass) { Capistrano::CLI.password_prompt "Enter #{stage} database password:" }
26
+ set(:db_user) { Capistrano::CLI.ui.ask "Enter #{environment} database username:" }
27
+ set(:db_pass) { Capistrano::CLI.password_prompt "Enter #{environment} database password:" }
28
28
 
29
29
  db_config = ERB.new <<-EOF
30
30
  base: &base
@@ -32,8 +32,8 @@ Capistrano::Configuration.instance(:must_exist).load do
32
32
  username: #{db_user}
33
33
  password: #{db_pass}
34
34
 
35
- #{stage}:
36
- database: #{application}_#{stage}
35
+ #{environment}:
36
+ database: #{application}_#{environment}
37
37
  <<: *base
38
38
 
39
39
  test:
@@ -43,17 +43,12 @@ Capistrano::Configuration.instance(:must_exist).load do
43
43
 
44
44
  put db_config.result, "#{shared_path}/config/database.yml"
45
45
  end
46
-
47
- desc "Create symlink for database yaml stored in shared path"
48
- task :symlink do
49
- run "#{sudo} ln -nfs #{shared_path}/config/database.yml #{current_release}/config/database.yml"
50
- end
51
46
  end
52
47
 
53
48
  def prepare_for_db_command
54
- set :db_name, "#{application}_#{stage}"
49
+ set :db_name, "#{application}_#{environment}"
55
50
  set(:db_admin_user) { Capistrano::CLI.ui.ask "Username with priviledged database access (to create db):" }
56
- set(:db_user) { Capistrano::CLI.ui.ask "Enter #{stage} database username:" }
57
- set(:db_pass) { Capistrano::CLI.password_prompt "Enter #{stage} database password:" }
51
+ set(:db_user) { Capistrano::CLI.ui.ask "Enter #{environment} database username:" }
52
+ set(:db_pass) { Capistrano::CLI.password_prompt "Enter #{environment} database password:" }
58
53
  end
59
54
  end
@@ -5,10 +5,9 @@ Capistrano::Configuration.instance(:must_exist).load do
5
5
  db.create_yaml if Capistrano::CLI.ui.agree("Create database.yml in app's shared path?")
6
6
  end
7
7
 
8
- after "deploy:update_code", "db:symlink"
8
+ after "deploy:update_code", "symlink:shared_config_files"
9
9
 
10
10
  namespace :deploy do
11
-
12
11
  desc <<-DESC
13
12
  Restarts your application. If you are running Phusion Passenger, you can \
14
13
  explicitly set the server type:
@@ -33,6 +32,5 @@ Capistrano::Configuration.instance(:must_exist).load do
33
32
  try_runner "#{current_path}/script/process/reaper"
34
33
  end
35
34
  end
36
-
37
35
  end
38
36
  end
data/lib/recipes/log.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  Capistrano::Configuration.instance(:must_exist).load do
2
2
  namespace :log do
3
-
4
3
  desc "Tail application log file for the specified environment, e.g. cap staging log:tail"
5
4
  task :tail, :roles => :app do
6
- run "tail -f #{shared_path}/log/#{stage}.log" do |channel, stream, data|
5
+ run "tail -f #{shared_path}/log/#{environment}.log" do |channel, stream, data|
7
6
  puts "#{channel[:host]}: #{data}"
8
7
  break if stream == :err
9
8
  end
@@ -13,7 +12,7 @@ Capistrano::Configuration.instance(:must_exist).load do
13
12
  Install log rotation script; optional args: days=7, size=5M, group (defaults to same value as :user)
14
13
  DESC
15
14
  task :rotate, :roles => :app do
16
- rotate_script = %Q{#{shared_path}/log/#{stage}.log {
15
+ rotate_script = %Q{#{shared_path}/log/#{environment}.log {
17
16
  daily
18
17
  rotate #{ENV['days'] || 7}
19
18
  size #{ENV['size'] || "5M"}
@@ -25,6 +24,5 @@ Capistrano::Configuration.instance(:must_exist).load do
25
24
  "#{sudo} cp #{shared_path}/logrotate_script /etc/logrotate.d/#{application}"
26
25
  run "rm #{shared_path}/logrotate_script"
27
26
  end
28
-
29
27
  end
30
28
  end
@@ -1,6 +1,5 @@
1
1
  Capistrano::Configuration.instance(:must_exist).load do
2
2
  namespace :passenger do
3
-
4
3
  desc "Restart Rails app running under Phusion Passenger by touching restart.txt"
5
4
  task :bounce, :roles => :app do
6
5
  run "#{sudo} touch #{current_path}/tmp/restart.txt"
@@ -15,6 +14,5 @@ Capistrano::Configuration.instance(:must_exist).load do
15
14
  task :status, :roles => :app do
16
15
  run "#{sudo} /opt/ruby-enterprise/bin/passenger-status"
17
16
  end
18
-
19
17
  end
20
18
  end
@@ -1,22 +1,51 @@
1
1
  Capistrano::Configuration.instance(:must_exist).load do
2
+ unless exists?(:config_files)
3
+ set :config_files, 'database.yml'
4
+ end
5
+
2
6
  namespace :symlink do
3
-
4
7
  desc <<-DESC
5
- Create shared directories
8
+ Create shared directories. Specify which directories are shared via:
9
+ set :shared_dirs, %w(avatars videos)
6
10
  DESC
7
11
  task :create_shared_dirs, :roles => :app do
8
- symlinks.each { |link| run "mkdir -p #{shared_path}/#{link}" } if symlinks
12
+ shared_dirs.each { |link| run "mkdir -p #{shared_path}/#{link}" } if shared_dirs
9
13
  end
10
14
 
11
15
  desc <<-DESC
12
- Create links to shared directories from current deployment's public directory
16
+ Create links to shared directories from current deployment's public directory.
17
+ Specify which directories are shared via:
18
+ set :shared_dirs, %w(avatars videos)
13
19
  DESC
14
- task :create_links, :roles => :app do
15
- symlinks.each { |link|
20
+ task :shared_directories, :roles => :app do
21
+ shared_dirs.each do |link|
16
22
  run "rm -rf #{release_path}/public/#{link}"
17
23
  run "ln -nfs #{shared_path}/#{link} #{release_path}/public/#{link}"
18
- } if symlinks
24
+ end if shared_dirs
19
25
  end
20
26
 
27
+ desc <<-DESC
28
+ Create links to config files stored in shared config directory.
29
+ Specify which config files to link using the following:
30
+ set :config_files, 'database.yml'
31
+ DESC
32
+ task :shared_config_files, :roles => :app do
33
+ config_files.each do |file_path|
34
+ begin
35
+ run "#{sudo} rm #{config_path}#{file_path}"
36
+ run "#{sudo} ln -nfs #{shared_config_path}#{file_path} #{config_path}#{file_path}"
37
+ rescue
38
+ puts "Problem linking to #{file_path}. Be sure file already exists in #{shared_config_path}."
39
+ end
40
+ end if config_files
41
+ end
42
+ end
43
+
44
+ def config_path
45
+ "#{current_release}/config/"
46
+ end
47
+
48
+ def shared_config_path
49
+ "#{shared_path}/config/"
21
50
  end
22
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-recipes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Misiowiec
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-29 00:00:00 -07:00
12
+ date: 2009-10-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,16 +22,6 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 2.5.9
24
24
  version:
25
- - !ruby/object:Gem::Dependency
26
- name: capistrano-ext
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.2.1
34
- version:
35
25
  description: Extend the Capistrano gem with these useful recipes
36
26
  email: phil@webficient.com
37
27
  executables: []