chrisrec 0.1.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/Manifest +39 -0
- data/README +0 -0
- data/Rakefile +15 -0
- data/chrisrec.gemspec +30 -0
- data/lib/backgroundrb/backgroundrb.rb +22 -0
- data/lib/chrisrec.rb +12 -0
- data/lib/console/console.rb +19 -0
- data/lib/daemon/daemon.rb +134 -0
- data/lib/gitosis/gitosis.rb +131 -0
- data/lib/memcached/memcached.rb +140 -0
- data/lib/munin/munin.rb +135 -0
- data/lib/mysql/mysql.rake +95 -0
- data/lib/mysql/mysql.rb +51 -0
- data/lib/rake/rake.rb +19 -0
- data/lib/rakecron/rakecron.rb +35 -0
- data/lib/starling/starling.rb +124 -0
- data/lib/tomcat/tomcat.rb +200 -0
- data/lib/workling/workling.rb +72 -0
- data/template/daemon/daemon-init-script.erb +59 -0
- data/template/daemon/monit.conf.erb +4 -0
- data/template/memcached/memcached-conf.erb +1 -0
- data/template/memcached/memcached.erb +59 -0
- data/template/memcached/monit.conf.erb +8 -0
- data/template/memcached/start-memcached.erb +118 -0
- data/template/munin/httpd-vhost-munin.conf.erb +20 -0
- data/template/munin/munin.conf.erb +70 -0
- data/template/munin/munin_nginx_vhost.conf.erb +24 -0
- data/template/rakecron/rakecron.erb +12 -0
- data/template/starling/monit.conf.erb +14 -0
- data/template/starling/starling-init-script.erb +69 -0
- data/template/tomcat/conf/server.xml.erb +33 -0
- data/template/tomcat/conf/web.xml +1194 -0
- data/template/tomcat/logs/empty.txt +1 -0
- data/template/tomcat/monit.conf.erb +8 -0
- data/template/tomcat/temp/empty.txt +1 -0
- data/template/tomcat/tomcat.erb +28 -0
- data/template/tomcat/webapps/empty.txt +1 -0
- data/template/tomcat/work/empty.txt +1 -0
- data/template/workling/monit.conf.erb +4 -0
- data/template/workling/workling-init-script.erb +56 -0
- metadata +121 -0
data/Manifest
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
Manifest
|
2
|
+
README
|
3
|
+
Rakefile
|
4
|
+
lib/backgroundrb/backgroundrb.rb
|
5
|
+
lib/chrisrec.rb
|
6
|
+
lib/console/console.rb
|
7
|
+
lib/daemon/daemon.rb
|
8
|
+
lib/gitosis/gitosis.rb
|
9
|
+
lib/memcached/memcached.rb
|
10
|
+
lib/munin/munin.rb
|
11
|
+
lib/mysql/mysql.rake
|
12
|
+
lib/mysql/mysql.rb
|
13
|
+
lib/rake/rake.rb
|
14
|
+
lib/rakecron/rakecron.rb
|
15
|
+
lib/starling/starling.rb
|
16
|
+
lib/tomcat/tomcat.rb
|
17
|
+
lib/workling/workling.rb
|
18
|
+
template/daemon/daemon-init-script.erb
|
19
|
+
template/daemon/monit.conf.erb
|
20
|
+
template/memcached/memcached-conf.erb
|
21
|
+
template/memcached/memcached.erb
|
22
|
+
template/memcached/monit.conf.erb
|
23
|
+
template/memcached/start-memcached.erb
|
24
|
+
template/munin/httpd-vhost-munin.conf.erb
|
25
|
+
template/munin/munin.conf.erb
|
26
|
+
template/munin/munin_nginx_vhost.conf.erb
|
27
|
+
template/rakecron/rakecron.erb
|
28
|
+
template/starling/monit.conf.erb
|
29
|
+
template/starling/starling-init-script.erb
|
30
|
+
template/tomcat/conf/server.xml.erb
|
31
|
+
template/tomcat/conf/web.xml
|
32
|
+
template/tomcat/logs/empty.txt
|
33
|
+
template/tomcat/monit.conf.erb
|
34
|
+
template/tomcat/temp/empty.txt
|
35
|
+
template/tomcat/tomcat.erb
|
36
|
+
template/tomcat/webapps/empty.txt
|
37
|
+
template/tomcat/work/empty.txt
|
38
|
+
template/workling/monit.conf.erb
|
39
|
+
template/workling/workling-init-script.erb
|
data/README
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Rakefile
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake'
|
4
|
+
require 'echoe'
|
5
|
+
|
6
|
+
Echoe.new('chrisrec', '0.1.0') do |p|
|
7
|
+
p.description = "Extend Deprec with other recipies."
|
8
|
+
p.url = "http://github.com/dougochris/chrisrec"
|
9
|
+
p.author = "Chris Douglas"
|
10
|
+
p.email = "dougo.chris@gmail.com"
|
11
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
12
|
+
p.development_dependencies = []
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/chrisrec.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{chrisrec}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Chris Douglas"]
|
9
|
+
s.date = %q{2010-02-22}
|
10
|
+
s.description = %q{Extend Deprec with other recipies.}
|
11
|
+
s.email = %q{dougo.chris@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["README", "lib/backgroundrb/backgroundrb.rb", "lib/chrisrec.rb", "lib/console/console.rb", "lib/daemon/daemon.rb", "lib/gitosis/gitosis.rb", "lib/memcached/memcached.rb", "lib/munin/munin.rb", "lib/mysql/mysql.rake", "lib/mysql/mysql.rb", "lib/rake/rake.rb", "lib/rakecron/rakecron.rb", "lib/starling/starling.rb", "lib/tomcat/tomcat.rb", "lib/workling/workling.rb"]
|
13
|
+
s.files = ["Manifest", "README", "Rakefile", "lib/backgroundrb/backgroundrb.rb", "lib/chrisrec.rb", "lib/console/console.rb", "lib/daemon/daemon.rb", "lib/gitosis/gitosis.rb", "lib/memcached/memcached.rb", "lib/munin/munin.rb", "lib/mysql/mysql.rake", "lib/mysql/mysql.rb", "lib/rake/rake.rb", "lib/rakecron/rakecron.rb", "lib/starling/starling.rb", "lib/tomcat/tomcat.rb", "lib/workling/workling.rb", "template/daemon/daemon-init-script.erb", "template/daemon/monit.conf.erb", "template/memcached/memcached-conf.erb", "template/memcached/memcached.erb", "template/memcached/monit.conf.erb", "template/memcached/start-memcached.erb", "template/munin/httpd-vhost-munin.conf.erb", "template/munin/munin.conf.erb", "template/munin/munin_nginx_vhost.conf.erb", "template/rakecron/rakecron.erb", "template/starling/monit.conf.erb", "template/starling/starling-init-script.erb", "template/tomcat/conf/server.xml.erb", "template/tomcat/conf/web.xml", "template/tomcat/logs/empty.txt", "template/tomcat/monit.conf.erb", "template/tomcat/temp/empty.txt", "template/tomcat/tomcat.erb", "template/tomcat/webapps/empty.txt", "template/tomcat/work/empty.txt", "template/workling/monit.conf.erb", "template/workling/workling-init-script.erb", "chrisrec.gemspec"]
|
14
|
+
s.homepage = %q{http://github.com/dougochris/chrisrec}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Chrisrec", "--main", "README"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{chrisrec}
|
18
|
+
s.rubygems_version = %q{1.3.6}
|
19
|
+
s.summary = %q{Extend Deprec with other recipies.}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
else
|
27
|
+
end
|
28
|
+
else
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :chrisrec do
|
3
|
+
namespace :backgroundrb do
|
4
|
+
|
5
|
+
desc "Stop the backgroundrb server"
|
6
|
+
task :stop , :roles => :app do
|
7
|
+
run "cd #{current_path} && PATH=/opt/ruby-enterprise/bin:$PATH RAILS_ENV=production ./script/backgroundrb stop"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Start the backgroundrb server"
|
11
|
+
task :start , :roles => :app do
|
12
|
+
run "cd #{current_path} && PATH=/opt/ruby-enterprise/bin:$PATH RAILS_ENV=production ./script/backgroundrb start"
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Start the backgroundrb server"
|
16
|
+
task :restart, :roles => :app do
|
17
|
+
stop
|
18
|
+
start
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/chrisrec.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/gitosis/gitosis.rb"
|
2
|
+
require "#{File.dirname(__FILE__)}/munin/munin.rb"
|
3
|
+
require "#{File.dirname(__FILE__)}/rakecron/rakecron.rb"
|
4
|
+
require "#{File.dirname(__FILE__)}/backgroundrb/backgroundrb.rb"
|
5
|
+
require "#{File.dirname(__FILE__)}/workling/workling.rb"
|
6
|
+
require "#{File.dirname(__FILE__)}/starling/starling.rb"
|
7
|
+
require "#{File.dirname(__FILE__)}/rake/rake.rb"
|
8
|
+
require "#{File.dirname(__FILE__)}/mysql/mysql.rb"
|
9
|
+
require "#{File.dirname(__FILE__)}/memcached/memcached.rb"
|
10
|
+
require "#{File.dirname(__FILE__)}/daemon/daemon.rb"
|
11
|
+
require "#{File.dirname(__FILE__)}/tomcat/tomcat.rb"
|
12
|
+
require "#{File.dirname(__FILE__)}/console/console.rb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :chrisrec do
|
3
|
+
namespace :script do
|
4
|
+
def interactive_ssh(cmd)
|
5
|
+
system %Q{ssh #{user}@#{roles[:app].servers.first.host} -t '#{cmd}'}
|
6
|
+
end
|
7
|
+
|
8
|
+
desc 'run the rails console on the app-server of the current stage'
|
9
|
+
task :console, :roles => :app do
|
10
|
+
interactive_ssh "cd #{deploy_to}/current && script/console #{rails_env}"
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'open a SSH prompt in the currently deployed rails app'
|
14
|
+
task :ssh, :roles => :app do
|
15
|
+
interactive_ssh "cd #{deploy_to}/current && bash"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# chrisrec:daemon:deploy:setup
|
2
|
+
# chrisrec:daemon:install
|
3
|
+
|
4
|
+
# chrisrec:daemon:config_gen
|
5
|
+
# chrisrec:daemon:config
|
6
|
+
# chrisrec:daemon:restart
|
7
|
+
|
8
|
+
# chrisrec:daemon:deploy
|
9
|
+
# chrisrec:daemon:rollback
|
10
|
+
|
11
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
12
|
+
namespace :chrisrec do
|
13
|
+
namespace :daemon do
|
14
|
+
|
15
|
+
# set :daemon, "TODO"
|
16
|
+
# set :daemon_name, "TODO"
|
17
|
+
# set :daemon_pid, "TODO"
|
18
|
+
|
19
|
+
set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
|
20
|
+
|
21
|
+
SYSTEM_CONFIG_FILES[:daemon] = [
|
22
|
+
{:template => 'daemon-init-script.erb',
|
23
|
+
:path => 'daemon/etc/init.d/daemon',
|
24
|
+
:mode => 0755,
|
25
|
+
:owner => 'root:root'},
|
26
|
+
|
27
|
+
{:template => 'monit.conf.erb',
|
28
|
+
:path => "daemon/etc/monit.d/monit_daemon.conf",
|
29
|
+
:mode => 0600,
|
30
|
+
:owner => 'root:root'}
|
31
|
+
]
|
32
|
+
|
33
|
+
# Generating Configuration Files
|
34
|
+
desc "install any required gems"
|
35
|
+
task :install do
|
36
|
+
if gems_for_project
|
37
|
+
gems_for_project.each { |gem| gem2.install(gem) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Generating Configuration Files
|
42
|
+
desc "Generate configuration file(s) for daemon from template(s)"
|
43
|
+
task :config_gen do
|
44
|
+
SYSTEM_CONFIG_FILES[:daemon].each do |file|
|
45
|
+
deprec2.render_template(:daemon, file)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'Deploy configuration files(s) for daemon'
|
50
|
+
task :config, :roles => :app do
|
51
|
+
deprec2.push_configs(:daemon, SYSTEM_CONFIG_FILES[:daemon])
|
52
|
+
symlink_init_d
|
53
|
+
symlink_monit_d
|
54
|
+
|
55
|
+
activate
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "Stop daemon"
|
59
|
+
task :stop , :roles => :app do
|
60
|
+
sudo "/etc/init.d/#{daemon_name} stop"
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "Start daemon"
|
64
|
+
task :start , :roles => :app do
|
65
|
+
sudo "/etc/init.d/#{daemon_name} start"
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "Start the daemon server"
|
69
|
+
task :restart, :roles => :app do
|
70
|
+
stop
|
71
|
+
sleep(2)
|
72
|
+
start
|
73
|
+
end
|
74
|
+
|
75
|
+
task :activate, :roles => :app do
|
76
|
+
send(run_method, "update-rc.d #{daemon_name} defaults")
|
77
|
+
end
|
78
|
+
|
79
|
+
task :deactivate, :roles => :app do
|
80
|
+
send(run_method, "update-rc.d -f #{daemon_name} remove")
|
81
|
+
end
|
82
|
+
|
83
|
+
task :symlink_init_d do
|
84
|
+
sudo "ln -fs #{deploy_to}/daemon/daemon/etc/init.d/daemon /etc/init.d/#{daemon_name}"
|
85
|
+
end
|
86
|
+
|
87
|
+
task :symlink_monit_d do
|
88
|
+
sudo "ln -fs #{deploy_to}/daemon/daemon/etc/monit.d/monit_daemon.conf /etc/monit.d/monit_daemon_#{daemon_name}.conf"
|
89
|
+
end
|
90
|
+
|
91
|
+
namespace :deploy do
|
92
|
+
desc 'deploy'
|
93
|
+
task :default do
|
94
|
+
strategy.deploy!
|
95
|
+
|
96
|
+
run "rm -f #{current_path} && ln -s #{latest_release} #{current_path}"
|
97
|
+
|
98
|
+
# mkdir -p is making sure that the directories are there for some SCM's that don't
|
99
|
+
# save empty folders
|
100
|
+
run <<-CMD
|
101
|
+
rm -rf #{latest_release}/log #{latest_release}/tmp/pids &&
|
102
|
+
mkdir -p #{latest_release}/tmp &&
|
103
|
+
ln -s #{shared_path}/log #{latest_release}/log &&
|
104
|
+
ln -s #{shared_path}/pids #{latest_release}/tmp/pids
|
105
|
+
CMD
|
106
|
+
|
107
|
+
top.chrisrec.daemon.restart
|
108
|
+
end
|
109
|
+
|
110
|
+
desc 'setup'
|
111
|
+
task :setup do
|
112
|
+
dirs = [deploy_to, releases_path, shared_path]
|
113
|
+
dirs += shared_children.map { |d| File.join(shared_path, d) }
|
114
|
+
sudo "mkdir -p #{dirs.join(' ')}"
|
115
|
+
sudo "chgrp -R #{group} #{dirs.join(' ')}"
|
116
|
+
sudo "chmod g+w #{dirs.join(' ')}"
|
117
|
+
end
|
118
|
+
|
119
|
+
desc 'rollback'
|
120
|
+
task :rollback do
|
121
|
+
if previous_release
|
122
|
+
run "rm #{current_path}; ln -s #{previous_release} #{current_path}"
|
123
|
+
else
|
124
|
+
abort "could not rollback the code because there is no prior release"
|
125
|
+
end
|
126
|
+
|
127
|
+
run "if [ `readlink #{current_path}` != #{current_release} ]; then rm -rf #{current_release}; fi"
|
128
|
+
|
129
|
+
top.chrisrec.daemon.restart
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :chrisrec do
|
3
|
+
namespace :gitosis do
|
4
|
+
|
5
|
+
desc "Sets up the remote user's public key on remote git user"
|
6
|
+
task :create_remote_user_key, :roles => :scm do
|
7
|
+
default(:target_user) {
|
8
|
+
Capistrano::CLI.ui.ask "Setup keys for which user?" do |q|
|
9
|
+
q.default = user
|
10
|
+
end
|
11
|
+
}
|
12
|
+
|
13
|
+
set (:git_ip) {
|
14
|
+
Capistrano::CLI.ui.ask "Enter git ip address" do |q|
|
15
|
+
q.default = repository.scan(/@(.*):/).flatten.to_s
|
16
|
+
end
|
17
|
+
}
|
18
|
+
|
19
|
+
FileUtils.rm_rf("config/_gitosis_temp_#{domain}") if File.directory?("config/_gitosis_temp_#{domain}")
|
20
|
+
FileUtils.mkdir_p("config/_gitosis_temp_#{domain}") if !File.directory?("config/_gitosis_temp_#{domain}")
|
21
|
+
system("git clone git@#{git_ip}:gitosis-admin.git config/_gitosis_temp_#{domain}/gitosis-admin.git") if !File.exists?("config/_gitosis_temp_#{domain}/gitosis-admin.git")
|
22
|
+
|
23
|
+
# create key pair if it doesn't exist, and fetch public key
|
24
|
+
run "sh -c 'test -f /home/#{target_user}/.ssh/id_rsa.pub || /usr/bin/ssh-keygen -q -t rsa -N \"\" -f /home/#{target_user}/.ssh/id_rsa'"
|
25
|
+
|
26
|
+
get("/home/#{target_user}/.ssh/id_rsa.pub", "config/_gitosis_temp_#{domain}/#{target_user}.pub")
|
27
|
+
gitosis_server = File.open("config/_gitosis_temp_#{domain}/#{target_user}.pub", "r") do |line|
|
28
|
+
line.gets.split(" ").last
|
29
|
+
end
|
30
|
+
system("mv config/_gitosis_temp_#{domain}/#{target_user}.pub config/_gitosis_temp_#{domain}/gitosis-admin.git/keydir/#{gitosis_server}.pub")
|
31
|
+
system "cd config/_gitosis_temp_#{domain}/gitosis-admin.git && git add . && git commit -m \"Added write permission to new user\" && git push"
|
32
|
+
FileUtils.rm_rf("config/_gitosis_temp_#{domain}") if File.directory?("config/_gitosis_temp_#{domain}")
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Create the gitosis settings for remote repository"
|
36
|
+
task :config_gen, :roles => :scm do
|
37
|
+
set (:git_ip) {
|
38
|
+
Capistrano::CLI.ui.ask "Enter git ip address" do |q|
|
39
|
+
q.default = repository.scan(/@(.*):/).flatten.to_s
|
40
|
+
end
|
41
|
+
}
|
42
|
+
|
43
|
+
FileUtils.rm_rf("config/_gitosis_temp_") if File.directory?("config/_gitosis_temp_")
|
44
|
+
FileUtils.mkdir_p("config/_gitosis_temp_")
|
45
|
+
system("git clone git@#{git_ip}:gitosis-admin.git config/_gitosis_temp_/gitosis-admin.git")
|
46
|
+
|
47
|
+
puts "[group #{application}]"
|
48
|
+
puts "writable = #{application}"
|
49
|
+
puts "members = user1 user2 ..."
|
50
|
+
puts ""
|
51
|
+
puts "See config/_gitosis_temp_/gitosis-admin.git/keydir for available users"
|
52
|
+
puts ""
|
53
|
+
end
|
54
|
+
|
55
|
+
desc "Push the gitosis settings for remote repository"
|
56
|
+
task :config, :roles => :scm do
|
57
|
+
system "cd config/_gitosis_temp_/gitosis-admin.git && git add . && git commit -m \"Added repository #{application} and write permission to users\" && git push"
|
58
|
+
FileUtils.rm_rf("config/_gitosis_temp_") if File.directory?("config/_gitosis_temp_")
|
59
|
+
end
|
60
|
+
|
61
|
+
desc "Create remote git repository and import project into it"
|
62
|
+
task :setup_repo, :roles => :scm do
|
63
|
+
create_local_repos
|
64
|
+
push_local_repo
|
65
|
+
end
|
66
|
+
|
67
|
+
# Create git repository in local project
|
68
|
+
task :create_local_repos do
|
69
|
+
unless File.exists?(".git")
|
70
|
+
system("git init")
|
71
|
+
system("git remote add origin git@#{domain}:#{application}.git")
|
72
|
+
system("git add .")
|
73
|
+
system("git commit -a -m 'Initial import'")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Import project into git repository.
|
78
|
+
task :push_local_repo, :roles => :scm do
|
79
|
+
add_ignores
|
80
|
+
set (:git_ip) {
|
81
|
+
Capistrano::CLI.ui.ask "Enter git ip address" do |q|
|
82
|
+
q.default = repository.scan(/@(.*):/).flatten.to_s
|
83
|
+
end
|
84
|
+
}
|
85
|
+
|
86
|
+
puts "Importing application."
|
87
|
+
system "git push git@#{git_ip}:#{application}.git master:refs/heads/master"
|
88
|
+
system "git config --add branch.master.remote origin"
|
89
|
+
system "git config --add branch.master.merge refs/heads/master"
|
90
|
+
puts "Your repository is: git@#{git_ip}:#{application}.git"
|
91
|
+
end
|
92
|
+
|
93
|
+
# Ignore log files, tmp, sqlite3
|
94
|
+
task :add_ignores, :roles => :scm do
|
95
|
+
ignore = <<-FILE
|
96
|
+
.DS_Store
|
97
|
+
log/*.log
|
98
|
+
tmp/**/*
|
99
|
+
db/*.sqlite3
|
100
|
+
FILE
|
101
|
+
["log", "tmp/cache", "tmp/pids", "tmp/sessions", "tmp/sockets"].each do |dir|
|
102
|
+
system("touch #{dir}/.gitignore")
|
103
|
+
end
|
104
|
+
File.open(".gitignore", "w") { |f| f.write(ignore.strip.gsub(/^#{ignore[/\A\s*/]}/, "")) }
|
105
|
+
system "find . -type d -empty | xargs -I {} touch {}/.gitignore"
|
106
|
+
system "git add ."
|
107
|
+
system "git commit -a -m 'Touched .gitignore to emtpy folders, ignored log files, tmp, sqlite3 db'"
|
108
|
+
end
|
109
|
+
|
110
|
+
desc 'Tag deployment in git repository'
|
111
|
+
task :tag_deploy do
|
112
|
+
transaction do
|
113
|
+
tag_name = ['deployed', fetch(:stage,nil), release_name].compact.join('-')
|
114
|
+
`git tag #{tag_name} && git push --tags`
|
115
|
+
on_rollback do
|
116
|
+
`git tag -d #{tag_name} && git push #{git_remote} :#{tag_name}`
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
task :confirm do
|
122
|
+
message = "You are deploying to PRODUCTION. continue(y/n):"
|
123
|
+
answer = Capistrano::CLI.ui.ask(message)
|
124
|
+
abort "deployment to production was stopped" unless answer == 'y'
|
125
|
+
|
126
|
+
chrisrec.gitosis.tag_deploy # tag the production release
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :chrisrec do
|
3
|
+
namespace :memcached do
|
4
|
+
|
5
|
+
# role :cache, 'ADDRESS TO CACHE'
|
6
|
+
|
7
|
+
set :memcached_port, 11211
|
8
|
+
set :memcached_address, '127.0.0.1'
|
9
|
+
set :memcached_memory, 256
|
10
|
+
set :memcached_user, "memcached"
|
11
|
+
set :memcached_group, "memcached"
|
12
|
+
set :memcached_run_dir, "/var/run"
|
13
|
+
set :memcached_log_dir, "/var/log"
|
14
|
+
|
15
|
+
set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
|
16
|
+
|
17
|
+
desc "Install memcached"
|
18
|
+
task :install, :roles => :cache do
|
19
|
+
version = 'memcached-1.4.0'
|
20
|
+
set :src_package, {
|
21
|
+
:file => version + '.tar.gz',
|
22
|
+
# :md5sum => 'a08851f7fa7b15e92ee6320b7a79c321 memcached-1.2.2.tar.gz',
|
23
|
+
:dir => version,
|
24
|
+
:url => "http://www.danga.com/memcached/dist/#{version}.tar.gz",
|
25
|
+
:unpack => "tar zxf #{version}.tar.gz;",
|
26
|
+
:configure => %w{
|
27
|
+
./configure
|
28
|
+
--prefix=/usr/local
|
29
|
+
;
|
30
|
+
}.reject{|arg| arg.match '#'}.join(' '),
|
31
|
+
:make => 'make;',
|
32
|
+
:install => 'make install;'
|
33
|
+
}
|
34
|
+
apt.install( {:base => %w(libevent-dev)}, :stable )
|
35
|
+
deprec2.download_src(src_package, src_dir)
|
36
|
+
deprec2.install_from_src(src_package, src_dir)
|
37
|
+
|
38
|
+
# deprec2.mkdir(memcached_run_dir, :via => :sudo)
|
39
|
+
# deprec2.mkdir(memcached_log_dir, :via => :sudo)
|
40
|
+
|
41
|
+
create_memcached_user_and_group
|
42
|
+
set_perms_for_memcached_dirs
|
43
|
+
end
|
44
|
+
|
45
|
+
# Configure
|
46
|
+
SYSTEM_CONFIG_FILES[:memcached] = [
|
47
|
+
{:template => 'memcached.erb',
|
48
|
+
:path => 'memcached/etc/init.d/memcached',
|
49
|
+
:mode => 0755,
|
50
|
+
:owner => 'root:root'},
|
51
|
+
|
52
|
+
{:template => 'memcached-conf.erb',
|
53
|
+
:path => 'memcached/etc/init.d/memcached.conf',
|
54
|
+
:mode => 0755,
|
55
|
+
:owner => 'root:root'},
|
56
|
+
|
57
|
+
{:template => 'start-memcached.erb',
|
58
|
+
:path => 'memcached/etc/init.d/start-memcached',
|
59
|
+
:mode => 0755,
|
60
|
+
:owner => 'root:root'},
|
61
|
+
|
62
|
+
{:template => 'monit.conf.erb',
|
63
|
+
:path => "memcached/etc/monit.d/monit_memcached.conf",
|
64
|
+
:mode => 0600,
|
65
|
+
:owner => 'root:root'}
|
66
|
+
]
|
67
|
+
|
68
|
+
# Generating Configuration Files
|
69
|
+
desc "Generate configuration file(s) for memcached from template(s)"
|
70
|
+
task :config_gen do
|
71
|
+
SYSTEM_CONFIG_FILES[:memcached].each do |file|
|
72
|
+
deprec2.render_template(:memcached, file)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
desc 'Deploy configuration files(s) for memcached'
|
77
|
+
task :config, :roles => :cache do
|
78
|
+
|
79
|
+
deprec2.push_configs(:memcached, SYSTEM_CONFIG_FILES[:memcached])
|
80
|
+
symlink_init_d
|
81
|
+
symlink_monit_d
|
82
|
+
|
83
|
+
activate
|
84
|
+
end
|
85
|
+
|
86
|
+
desc "Stop memcached"
|
87
|
+
task :stop , :roles => :cache do
|
88
|
+
sudo "/etc/init.d/memcached_#{memcached_port} stop"
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "Start memcached"
|
92
|
+
task :start , :roles => :cache do
|
93
|
+
sudo "/etc/init.d/memcached_#{memcached_port} start"
|
94
|
+
end
|
95
|
+
|
96
|
+
desc "Start the memcached server"
|
97
|
+
task :restart, :roles => :cache do
|
98
|
+
stop
|
99
|
+
sleep(2)
|
100
|
+
start
|
101
|
+
end
|
102
|
+
|
103
|
+
task :activate, :roles => :cache do
|
104
|
+
send(run_method, "update-rc.d memcached_#{memcached_port} defaults")
|
105
|
+
end
|
106
|
+
|
107
|
+
task :deactivate, :roles => :cache do
|
108
|
+
send(run_method, "update-rc.d -f memcached_#{memcached_port} remove")
|
109
|
+
end
|
110
|
+
|
111
|
+
# User/Group creation & permission assignment
|
112
|
+
# These were based off the tasks used in the mongrel recipe -
|
113
|
+
# as this was probably the nicest way to ensure these tasks
|
114
|
+
# were doing the right thing.
|
115
|
+
desc "create user and group for memcached to run as"
|
116
|
+
task :create_memcached_user_and_group, :roles => :cache do
|
117
|
+
deprec2.groupadd(memcached_group)
|
118
|
+
deprec2.useradd(memcached_user, :group => memcached_group, :homedir => false)
|
119
|
+
# Set the primary group for the memcached user (in case user already existed
|
120
|
+
# when previous command was run)
|
121
|
+
sudo "usermod --gid #{memcached_group} #{memcached_user}"
|
122
|
+
end
|
123
|
+
|
124
|
+
desc "set group ownership and permissions on dirs memcached needs to write to"
|
125
|
+
task :set_perms_for_memcached_dirs, :roles => :cache do
|
126
|
+
# sudo "chgrp -R #{memcached_group} #{memcached_run_dir}"
|
127
|
+
# sudo "chmod -R g+w #{memcached_run_dir}"
|
128
|
+
end
|
129
|
+
|
130
|
+
task :symlink_init_d, :roles => :cache do
|
131
|
+
sudo "ln -fs #{deploy_to}/memcached/memcached/etc/init.d/memcached /etc/init.d/memcached_#{memcached_port}"
|
132
|
+
end
|
133
|
+
|
134
|
+
task :symlink_monit_d, :roles => :cache do
|
135
|
+
sudo "ln -fs #{deploy_to}/memcached/memcached/etc/monit.d/monit_memcached.conf /etc/monit.d/monit_memcached_#{memcached_port}.conf"
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|