if-vlad 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Rakefile +14 -0
- data/Readme +49 -0
- data/VERSION +1 -0
- data/lib/if-vlad.rb +24 -0
- data/lib/if-vlad/cleanup.rb +22 -0
- data/lib/if-vlad/gems.rb +10 -0
- data/lib/if-vlad/git_with_submodule_support.rb +56 -0
- data/lib/if-vlad/maintenance.rb +15 -0
- data/lib/if-vlad/migrate.rb +22 -0
- data/lib/if-vlad/start_stop.rb +25 -0
- data/lib/if-vlad/symlink.rb +11 -0
- data/lib/if-vlad/thinking_sphinx.rb +41 -0
- data/lib/if-vlad/touch.rb +11 -0
- data/lib/if-vlad/update.rb +29 -0
- data/lib/if-vlad/update_crontab.rb +10 -0
- metadata +80 -0
data/.gitignore
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
Jeweler::Tasks.new do |gemspec|
|
4
|
+
gemspec.name = "if-vlad"
|
5
|
+
gemspec.summary = "Innovation Factory Specific Vlad Recipes"
|
6
|
+
gemspec.description = "Our deployment specific vlad recipes. We use them, perhaps they're useful for you too?"
|
7
|
+
gemspec.email = "dev@innovationfactory.eu"
|
8
|
+
gemspec.homepage = "http://github.com/innovationfactory/if-vlad"
|
9
|
+
gemspec.authors = ["Sam Aaron", "Sjoerd Andringa"]
|
10
|
+
gemspec.add_dependency 'vlad', '>= 2.0.0'
|
11
|
+
end
|
12
|
+
rescue LoadError
|
13
|
+
puts "Oops, Jeweler isn't available. Install it with: gem install jeweler"
|
14
|
+
end
|
data/Readme
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
_ __ _ _
|
2
|
+
(_)/ _| | | | |
|
3
|
+
_| |_ ________ _| | __ _ __| |
|
4
|
+
| | _|______\ \ / / |/ _` |/ _` |
|
5
|
+
| | | \ V /| | (_| | (_| |
|
6
|
+
|_|_| \_/ |_|\__,_|\__,_|
|
7
|
+
|
8
|
+
- Innovation Factory Specific Vlad Recipes.
|
9
|
+
|
10
|
+
To get up and running with this, first up add the following to your project's Rakefile:
|
11
|
+
require 'if-vlad'
|
12
|
+
|
13
|
+
Then make sure that you have a config/deploy.rb file that might look like the following:
|
14
|
+
|
15
|
+
set :user, "deploy"
|
16
|
+
set :application, "people"
|
17
|
+
set :repository, "git@github.com:innovationfactory/people.git"
|
18
|
+
set :revision, "origin/deploy"
|
19
|
+
set :web_command, "sudo apache2ctl"
|
20
|
+
|
21
|
+
task :acceptance do |t|
|
22
|
+
set :environment, t.name
|
23
|
+
set :migrate_args, "RAILS_ENV=#{environment}"
|
24
|
+
set :deploy_host, "#{application}.#{environment}.innovationfactory.net"
|
25
|
+
set :domain, "#{user}@#{deploy_host}"
|
26
|
+
set :deploy_to, "/var/www/deploy/www/#{deploy_host}"
|
27
|
+
end
|
28
|
+
|
29
|
+
namespace :vlad do
|
30
|
+
namespace :if do
|
31
|
+
|
32
|
+
desc "Perform a full deploy."
|
33
|
+
task :deploy => %w[
|
34
|
+
vlad:if:maintenance:off
|
35
|
+
vlad:if:update
|
36
|
+
vlad:if:symlink:shared
|
37
|
+
vlad:if:touch:shared_log
|
38
|
+
vlad:if:gems:install
|
39
|
+
vlad:if:migrate
|
40
|
+
vlad:if:update_crontab
|
41
|
+
vlad:if:ts:full_reboot
|
42
|
+
vlad:if:start
|
43
|
+
vlad:if:cleanup
|
44
|
+
vlad:if:maintenance:on
|
45
|
+
]
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/lib/if-vlad.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'vlad'
|
2
|
+
|
3
|
+
#require custom IF recipes
|
4
|
+
require 'if-vlad/update'
|
5
|
+
require 'if-vlad/maintenance'
|
6
|
+
require 'if-vlad/gems'
|
7
|
+
require 'if-vlad/thinking_sphinx'
|
8
|
+
require 'if-vlad/migrate'
|
9
|
+
require 'if-vlad/cleanup'
|
10
|
+
require 'if-vlad/start_stop'
|
11
|
+
require 'if-vlad/symlink'
|
12
|
+
require 'if-vlad/touch'
|
13
|
+
require 'if-vlad/update_crontab'
|
14
|
+
require 'if-vlad/git_with_submodule_support'
|
15
|
+
|
16
|
+
|
17
|
+
#require deploy script
|
18
|
+
begin
|
19
|
+
Kernel.load 'config/deploy.rb'
|
20
|
+
rescue LoadError
|
21
|
+
puts "Couldn't find config/deploy.rb, perhaps you might consider making one?"
|
22
|
+
end
|
23
|
+
|
24
|
+
Kernel.load "config/deploy_#{ENV['to']}.rb" if ENV['to']
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
desc "Clean up old releases. By default, the last 5 releases are kept on
|
4
|
+
each server (though you can change this with the keep_releases variable).
|
5
|
+
All other deployed revisions are removed from the servers.".cleanup
|
6
|
+
|
7
|
+
remote_task :cleanup do
|
8
|
+
max = keep_releases
|
9
|
+
if releases.length <= max then
|
10
|
+
puts "no old releases to clean up #{releases.length} <= #{max}"
|
11
|
+
else
|
12
|
+
puts "keeping #{max} of #{releases.length} deployed releases"
|
13
|
+
|
14
|
+
directories = (releases - releases.last(max)).map { |release|
|
15
|
+
File.join(releases_path, release)
|
16
|
+
}.join(" ")
|
17
|
+
|
18
|
+
run "rm -rf #{directories}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/if-vlad/gems.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
class Vlad::GitWithSubmoduleSupport
|
2
|
+
#based entirely upon the vlad-git gem.
|
3
|
+
|
4
|
+
VERSION = "1.0"
|
5
|
+
set :source, Vlad::GitWithSubmoduleSupport.new
|
6
|
+
set :git_cmd, "git"
|
7
|
+
|
8
|
+
##
|
9
|
+
# Returns the command that will check out +revision+ from the
|
10
|
+
# repository into directory +destination+. +revision+ can be any
|
11
|
+
# SHA1 or equivalent (e.g. branch, tag, etc...)def etc...)
|
12
|
+
# Also inits and updates submodules.
|
13
|
+
|
14
|
+
def checkout(revision, destination)
|
15
|
+
destination = File.join(destination, 'repo')
|
16
|
+
revision = 'HEAD' if revision =~ /head/i
|
17
|
+
|
18
|
+
[ "rm -rf #{destination}",
|
19
|
+
"#{git_cmd} clone #{repository} #{destination}",
|
20
|
+
"cd #{destination}",
|
21
|
+
"#{git_cmd} checkout -f -b deployed-#{revision} #{revision}",
|
22
|
+
"git submodule -q update --init",
|
23
|
+
"cd -"
|
24
|
+
].join(" && ")
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Returns the command that will export +revision+ from the current directory
|
29
|
+
# into the directory +destination+.
|
30
|
+
# Expects to be run from +scm_path+ after Vlad::Git#checkout
|
31
|
+
# Also checks out submodules.
|
32
|
+
|
33
|
+
def export(revision, destination)
|
34
|
+
revision = 'HEAD' if revision =~ /head/i
|
35
|
+
revision = "deployed-#{revision}"
|
36
|
+
|
37
|
+
[ "mkdir -p #{destination}",
|
38
|
+
"cd repo",
|
39
|
+
"git-archive-all.sh #{application}.tar",
|
40
|
+
"cat #{application}.tar | (cd #{destination} && tar xf -)",
|
41
|
+
"rm -f #{application}.tar",
|
42
|
+
"cd -",
|
43
|
+
"cd .."
|
44
|
+
].join(" && ")
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# Returns a command that maps human-friendly revision identifier +revision+
|
49
|
+
# into a git SHA1.
|
50
|
+
|
51
|
+
def revision(revision)
|
52
|
+
revision = 'HEAD' if revision =~ /head/i
|
53
|
+
|
54
|
+
"`#{git_cmd} rev-parse #{revision}`"
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
namespace :maintenance do
|
4
|
+
desc "Put up a 503 page for maintenance."
|
5
|
+
remote_task :on, :roles => :app do
|
6
|
+
run "touch #{current_path}/tmp/stop.txt"
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "Remove 503 page (after maintenance)."
|
10
|
+
remote_task :off, :roles => :app do
|
11
|
+
run "rm -f #{current_path}/tmp/stop.txt"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
desc "Run the migrate rake task for the the app. By default this is run in
|
4
|
+
the latest app directory. You can run migrations for the current app
|
5
|
+
directory by setting :migrate_target to :current. Additional environment
|
6
|
+
variables can be passed to rake via the migrate_env variable.".cleanup
|
7
|
+
|
8
|
+
# No application files are on the DB machine, also migrations should only be
|
9
|
+
# run once.
|
10
|
+
remote_task :migrate, :roles => :app do
|
11
|
+
break unless target_host == Rake::RemoteTask.hosts_for(:app).first
|
12
|
+
|
13
|
+
directory = case migrate_target.to_sym
|
14
|
+
when :current then current_path
|
15
|
+
when :latest then current_release
|
16
|
+
else raise ArgumentError, "unknown migration target #{migrate_target.inspect}"
|
17
|
+
end
|
18
|
+
|
19
|
+
run "cd #{directory}; #{rake_cmd} RAILS_ENV=#{rails_env} db:migrate #{migrate_args}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
set :web_command, "apachectl"
|
4
|
+
|
5
|
+
desc "(Re)Start the web servers"
|
6
|
+
remote_task :start_apache, :roles => :web do
|
7
|
+
run "#{web_command} restart"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Stop the web servers"
|
11
|
+
remote_task :stop_apache, :roles => :web do
|
12
|
+
run "#{web_command} stop"
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "(Re)Start the web and app servers"
|
16
|
+
remote_task :start do
|
17
|
+
Rake::Task['vlad:if:start_apache'].invoke
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Stop the web and app servers"
|
21
|
+
remote_task :stop do
|
22
|
+
Rake::Task['vlad:if:stop_apache'].invoke
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
desc "Create symlinks from local app dir to system shared dir"
|
4
|
+
namespace :symlink do
|
5
|
+
desc "Symlinks shared directory."
|
6
|
+
remote_task :shared, :roles => :app do
|
7
|
+
run "rm -rf #{current_path}/shared && ln -s #{shared_path} #{current_path}/shared"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
namespace :ts do
|
4
|
+
def run_ts_task(name)
|
5
|
+
run "cd #{current_path} && rake ts:#{name} RAILS_ENV=#{environment}"
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Reconfigure, reindex and restart Sphinx"
|
9
|
+
remote_task :full_reboot => %w[
|
10
|
+
ts:conf
|
11
|
+
ts:in
|
12
|
+
ts:run
|
13
|
+
]
|
14
|
+
|
15
|
+
desc "Generate Sphinx configuration file."
|
16
|
+
remote_task :conf, :roles => :web do
|
17
|
+
run_ts_task :conf
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Rebuild Sphinx' index."
|
21
|
+
remote_task :in, :roles => :web do
|
22
|
+
run_ts_task :in
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Stop Sphinx."
|
26
|
+
remote_task :stop, :roles => :web do
|
27
|
+
run_ts_task :stop
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Start Sphinx."
|
31
|
+
remote_task :start, :roles => :web do
|
32
|
+
run_ts_task :start
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Stop Sphinx if running and then start it."
|
36
|
+
remote_task :run, :roles => :web do
|
37
|
+
run_ts_task :run
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
namespace :touch do
|
4
|
+
desc "Touch the shared log to create a log file for this environment if one doesn't already exist"
|
5
|
+
remote_task :shared_log, :roles => :web do
|
6
|
+
run "cd #{current_path} && touch shared/log/#{environment}.log"
|
7
|
+
run "cd #{current_path} && touch shared/log/cron.log"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
desc "Updates your application server to the latest revision. Syncs
|
4
|
+
a copy of the repository, exports it as the latest release, fixes
|
5
|
+
up your symlinks, symlinks the latest revision to current and logs
|
6
|
+
the update.".cleanup
|
7
|
+
|
8
|
+
remote_task :update, :roles => :app do
|
9
|
+
symlink = false
|
10
|
+
begin
|
11
|
+
run [ "cd #{scm_path}",
|
12
|
+
"#{source.checkout revision, scm_path}",
|
13
|
+
"#{source.export revision, release_path}",
|
14
|
+
"chmod -R g+w #{latest_release}",
|
15
|
+
].join(" && ")
|
16
|
+
|
17
|
+
symlink = true
|
18
|
+
run "rm -f #{current_path} && ln -s #{latest_release} #{current_path}"
|
19
|
+
|
20
|
+
run "echo #{Time.now} $USER #{revision} #{File.basename release_path} >> #{deploy_to}/revisions.log"
|
21
|
+
rescue => e
|
22
|
+
run "rm -f #{current_path} && ln -s #{previous_release} #{current_path}" if
|
23
|
+
symlink
|
24
|
+
run "rm -rf #{release_path}"
|
25
|
+
raise e
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
namespace :vlad do
|
2
|
+
namespace :if do
|
3
|
+
desc "Update the crontab for the app's whenever schedule (stored in ./configs/schedule.rb)"
|
4
|
+
remote_task :update_crontab, :roles => :web do
|
5
|
+
run "cd #{current_path} && whenever --update-crontab #{application} --set 'environment=#{environment}&cron_log=#{shared_path}/log/cron.log'"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: if-vlad
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sam Aaron
|
8
|
+
- Sjoerd Andringa
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2009-11-04 00:00:00 +00:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: vlad
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 2.0.0
|
25
|
+
version:
|
26
|
+
description: Our deployment specific vlad recipes. We use them, perhaps they're useful for you too?
|
27
|
+
email: dev@innovationfactory.eu
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files: []
|
33
|
+
|
34
|
+
files:
|
35
|
+
- .gitignore
|
36
|
+
- Rakefile
|
37
|
+
- Readme
|
38
|
+
- VERSION
|
39
|
+
- lib/if-vlad.rb
|
40
|
+
- lib/if-vlad/cleanup.rb
|
41
|
+
- lib/if-vlad/gems.rb
|
42
|
+
- lib/if-vlad/git_with_submodule_support.rb
|
43
|
+
- lib/if-vlad/maintenance.rb
|
44
|
+
- lib/if-vlad/migrate.rb
|
45
|
+
- lib/if-vlad/start_stop.rb
|
46
|
+
- lib/if-vlad/symlink.rb
|
47
|
+
- lib/if-vlad/thinking_sphinx.rb
|
48
|
+
- lib/if-vlad/touch.rb
|
49
|
+
- lib/if-vlad/update.rb
|
50
|
+
- lib/if-vlad/update_crontab.rb
|
51
|
+
has_rdoc: true
|
52
|
+
homepage: http://github.com/innovationfactory/if-vlad
|
53
|
+
licenses: []
|
54
|
+
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options:
|
57
|
+
- --charset=UTF-8
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
version:
|
72
|
+
requirements: []
|
73
|
+
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 1.3.5
|
76
|
+
signing_key:
|
77
|
+
specification_version: 3
|
78
|
+
summary: Innovation Factory Specific Vlad Recipes
|
79
|
+
test_files: []
|
80
|
+
|