capones_recipes 0.10.1 → 0.10.2
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/.document +5 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +42 -0
- data/Rakefile +27 -0
- data/VERSION +1 -0
- data/capones_recipes.gemspec +97 -0
- data/config/deploy.rb +16 -0
- data/config/deploy/production.rb +7 -0
- data/config/deploy/staging.rb +7 -0
- data/lib/recipes/database/mysql.rb +93 -0
- data/lib/recipes/database/sqlite.rb +29 -0
- data/lib/recipes/database/sync.rb +320 -0
- data/lib/recipes/katalog/import.rb +62 -0
- data/lib/recipes/katalog/katalog.rb +9 -0
- data/lib/recipes/kuhsaft/setup.rb +16 -0
- data/lib/recipes/new_relic/new_relic.rb +17 -0
- data/lib/recipes/rails/bundler.rb +5 -0
- data/lib/recipes/rails/database_yml.rb +27 -0
- data/lib/recipes/rails/mod_rails.rb +38 -0
- data/lib/recipes/rails31/rails31.rb +6 -0
- data/lib/recipes/settings_logic/settings_logic.rb +17 -0
- data/lib/recipes/thinking_sphinx/thinking_sphinx.rb +25 -0
- metadata +26 -4
data/.document
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: http://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
cap-recipes (0.3.36)
|
|
5
|
+
capistrano (2.8.0)
|
|
6
|
+
highline
|
|
7
|
+
net-scp (>= 1.0.0)
|
|
8
|
+
net-sftp (>= 2.0.0)
|
|
9
|
+
net-ssh (>= 2.0.14)
|
|
10
|
+
net-ssh-gateway (>= 1.1.0)
|
|
11
|
+
capistrano-ext (1.2.1)
|
|
12
|
+
capistrano (>= 1.0.0)
|
|
13
|
+
capistrano_colors (0.5.4)
|
|
14
|
+
git (1.2.5)
|
|
15
|
+
highline (1.6.2)
|
|
16
|
+
jeweler (1.6.4)
|
|
17
|
+
bundler (~> 1.0)
|
|
18
|
+
git (>= 1.2.5)
|
|
19
|
+
rake
|
|
20
|
+
net-scp (1.0.4)
|
|
21
|
+
net-ssh (>= 1.99.1)
|
|
22
|
+
net-sftp (2.0.5)
|
|
23
|
+
net-ssh (>= 2.0.9)
|
|
24
|
+
net-ssh (2.1.4)
|
|
25
|
+
net-ssh-gateway (1.1.0)
|
|
26
|
+
net-ssh (>= 1.99.1)
|
|
27
|
+
rake (0.9.2)
|
|
28
|
+
rcov (0.9.9)
|
|
29
|
+
shoulda (2.11.3)
|
|
30
|
+
|
|
31
|
+
PLATFORMS
|
|
32
|
+
ruby
|
|
33
|
+
|
|
34
|
+
DEPENDENCIES
|
|
35
|
+
bundler (~> 1.0)
|
|
36
|
+
cap-recipes
|
|
37
|
+
capistrano
|
|
38
|
+
capistrano-ext
|
|
39
|
+
capistrano_colors
|
|
40
|
+
jeweler (~> 1.6.1)
|
|
41
|
+
rcov
|
|
42
|
+
shoulda
|
data/Rakefile
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'bundler'
|
|
5
|
+
begin
|
|
6
|
+
Bundler.setup(:default, :development)
|
|
7
|
+
rescue Bundler::BundlerError => e
|
|
8
|
+
$stderr.puts e.message
|
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
|
10
|
+
exit e.status_code
|
|
11
|
+
end
|
|
12
|
+
require 'rake'
|
|
13
|
+
|
|
14
|
+
require 'jeweler'
|
|
15
|
+
Jeweler::Tasks.new do |gem|
|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
|
17
|
+
gem.name = "capones_recipes"
|
|
18
|
+
gem.homepage = "http://github.com/raskhadafi/capones-recipes"
|
|
19
|
+
gem.license = "MIT"
|
|
20
|
+
gem.summary = "Some capistrano recipes for use."
|
|
21
|
+
gem.description = "A collection of useful capistrano recipes used by CyT GmbH and others."
|
|
22
|
+
gem.email = "roman.simecek@cyt.ch"
|
|
23
|
+
gem.authors = ["Roman Simecek", "Simon Hürlimann"]
|
|
24
|
+
# gem.files = ['lib/recipes/*', 'lib/*', 'Capfile', 'lib/cookbook/*']
|
|
25
|
+
# dependencies defined in Gemfile
|
|
26
|
+
end
|
|
27
|
+
Jeweler::RubygemsDotOrgTasks.new
|
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.10.2
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Generated by jeweler
|
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
|
+
# -*- encoding: utf-8 -*-
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = %q{capones_recipes}
|
|
8
|
+
s.version = "0.10.2"
|
|
9
|
+
|
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
+
s.authors = ["Roman Simecek", "Simon Hürlimann"]
|
|
12
|
+
s.date = %q{2011-08-17}
|
|
13
|
+
s.description = %q{A collection of useful capistrano recipes used by CyT GmbH and others.}
|
|
14
|
+
s.email = %q{roman.simecek@cyt.ch}
|
|
15
|
+
s.extra_rdoc_files = [
|
|
16
|
+
"LICENSE.txt",
|
|
17
|
+
"README.rdoc"
|
|
18
|
+
]
|
|
19
|
+
s.files = [
|
|
20
|
+
".document",
|
|
21
|
+
"Capfile",
|
|
22
|
+
"Gemfile",
|
|
23
|
+
"Gemfile.lock",
|
|
24
|
+
"LICENSE.txt",
|
|
25
|
+
"README.rdoc",
|
|
26
|
+
"Rakefile",
|
|
27
|
+
"VERSION",
|
|
28
|
+
"capones_recipes.gemspec",
|
|
29
|
+
"config/deploy.rb",
|
|
30
|
+
"config/deploy/production.rb",
|
|
31
|
+
"config/deploy/staging.rb",
|
|
32
|
+
"lib/capones_recipes.rb",
|
|
33
|
+
"lib/cookbook/rails.rb",
|
|
34
|
+
"lib/cookbook/rails31.rb",
|
|
35
|
+
"lib/cookbook/wikisigns.rb",
|
|
36
|
+
"lib/recipes/database.rb",
|
|
37
|
+
"lib/recipes/database/mysql.rb",
|
|
38
|
+
"lib/recipes/database/sqlite.rb",
|
|
39
|
+
"lib/recipes/database/sync.rb",
|
|
40
|
+
"lib/recipes/katalog.rb",
|
|
41
|
+
"lib/recipes/katalog/import.rb",
|
|
42
|
+
"lib/recipes/katalog/katalog.rb",
|
|
43
|
+
"lib/recipes/kuhsaft.rb",
|
|
44
|
+
"lib/recipes/kuhsaft/setup.rb",
|
|
45
|
+
"lib/recipes/new_relic.rb",
|
|
46
|
+
"lib/recipes/new_relic/new_relic.rb",
|
|
47
|
+
"lib/recipes/rails.rb",
|
|
48
|
+
"lib/recipes/rails/bundler.rb",
|
|
49
|
+
"lib/recipes/rails/database_yml.rb",
|
|
50
|
+
"lib/recipes/rails/mod_rails.rb",
|
|
51
|
+
"lib/recipes/rails31.rb",
|
|
52
|
+
"lib/recipes/rails31/rails31.rb",
|
|
53
|
+
"lib/recipes/settings_logic.rb",
|
|
54
|
+
"lib/recipes/settings_logic/settings_logic.rb",
|
|
55
|
+
"lib/recipes/thinking_sphinx.rb",
|
|
56
|
+
"lib/recipes/thinking_sphinx/thinking_sphinx.rb"
|
|
57
|
+
]
|
|
58
|
+
s.homepage = %q{http://github.com/raskhadafi/capones-recipes}
|
|
59
|
+
s.licenses = ["MIT"]
|
|
60
|
+
s.require_paths = ["lib"]
|
|
61
|
+
s.rubygems_version = %q{1.6.2}
|
|
62
|
+
s.summary = %q{Some capistrano recipes for use.}
|
|
63
|
+
|
|
64
|
+
if s.respond_to? :specification_version then
|
|
65
|
+
s.specification_version = 3
|
|
66
|
+
|
|
67
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
68
|
+
s.add_runtime_dependency(%q<capistrano>, [">= 0"])
|
|
69
|
+
s.add_runtime_dependency(%q<capistrano_colors>, [">= 0"])
|
|
70
|
+
s.add_runtime_dependency(%q<cap-recipes>, [">= 0"])
|
|
71
|
+
s.add_runtime_dependency(%q<capistrano-ext>, [">= 0"])
|
|
72
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
|
73
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
|
74
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.1"])
|
|
75
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
|
76
|
+
else
|
|
77
|
+
s.add_dependency(%q<capistrano>, [">= 0"])
|
|
78
|
+
s.add_dependency(%q<capistrano_colors>, [">= 0"])
|
|
79
|
+
s.add_dependency(%q<cap-recipes>, [">= 0"])
|
|
80
|
+
s.add_dependency(%q<capistrano-ext>, [">= 0"])
|
|
81
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
82
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
|
83
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.1"])
|
|
84
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
85
|
+
end
|
|
86
|
+
else
|
|
87
|
+
s.add_dependency(%q<capistrano>, [">= 0"])
|
|
88
|
+
s.add_dependency(%q<capistrano_colors>, [">= 0"])
|
|
89
|
+
s.add_dependency(%q<cap-recipes>, [">= 0"])
|
|
90
|
+
s.add_dependency(%q<capistrano-ext>, [">= 0"])
|
|
91
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
92
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
|
93
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.1"])
|
|
94
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
data/config/deploy.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
set :application, "set your application name here"
|
|
2
|
+
set :repository, "set your repository location here"
|
|
3
|
+
set :web_root, "/srv/cyt.ch/"
|
|
4
|
+
|
|
5
|
+
role :web, "your web-server here" # Your HTTP server, Apache/etc
|
|
6
|
+
role :app, "your app-server here" # This may be the same as your `Web` server
|
|
7
|
+
role :db, "your primary db-server here", :primary => true # This is where Rails migrations will run
|
|
8
|
+
role :db, "your slave db-server here"
|
|
9
|
+
|
|
10
|
+
# Configuration
|
|
11
|
+
set :scm, :git
|
|
12
|
+
ssh_options[:forward_agent] = true
|
|
13
|
+
set :use_sudo, false
|
|
14
|
+
set :deploy_via, :remote_cache
|
|
15
|
+
set :git_enable_submodules, 1
|
|
16
|
+
set :copy_exclude, [".git", "spec"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
set :rails_env, 'production'
|
|
2
|
+
set :branch, "stable"
|
|
3
|
+
|
|
4
|
+
set :deploy_to, "#{web_root}#{application}"
|
|
5
|
+
role :web, "web01.#{application}" # Your HTTP server, Apache/etc
|
|
6
|
+
role :app, "web01.#{application}" # This may be the same as your `Web` server
|
|
7
|
+
role :db, "web01.#{application}", :primary => true # This is where Rails migrations will run
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
set :rails_env, 'staging'
|
|
2
|
+
set :branch, "master"
|
|
3
|
+
|
|
4
|
+
set :deploy_to, "#{web_root}#{application}"
|
|
5
|
+
role :web, "test.#{application}" # Your HTTP server, Apache/etc
|
|
6
|
+
role :app, "test.#{application}" # This may be the same as your `Web` server
|
|
7
|
+
role :db, "test.#{application}", :primary => true # This is where Rails migrations will run
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'capistrano/configuration'
|
|
2
|
+
# MySQL Backup/Restore tasks
|
|
3
|
+
#
|
|
4
|
+
# Based on code from:
|
|
5
|
+
# * http://snippets.aktagon.com/snippets/20-Capistrano-2-task-for-backing-up-your-MySQL-production-database-before-each-deployment
|
|
6
|
+
# * http://www.martin-probst.com/blog/2007/11/20/mysql-backup-restore-task-for-capistrano/
|
|
7
|
+
Capistrano::Configuration.instance.load do
|
|
8
|
+
namespace :mysql do
|
|
9
|
+
task :backup, :roles => :import do
|
|
10
|
+
backup_dir ||= "#{deploy_to}/backups"
|
|
11
|
+
run "mkdir -p #{backup_dir}"
|
|
12
|
+
|
|
13
|
+
filename = "#{backup_dir}/#{application}.dump.#{Time.now.strftime('%Y-%m-%d_%H-%M')}.sql.bz2"
|
|
14
|
+
text = capture "cat #{deploy_to}/current/config/database.yml"
|
|
15
|
+
yaml = YAML::load(text)
|
|
16
|
+
|
|
17
|
+
on_rollback { run "rm #{filename}" }
|
|
18
|
+
|
|
19
|
+
logger.info "Backing up to #{filename}..."
|
|
20
|
+
run "mysqldump -u #{yaml[rails_env]['username']} -p #{yaml[rails_env]['database']} -h #{yaml[rails_env]['host']}| bzip2 -c > #{filename}" do |ch, stream, out|
|
|
21
|
+
if out =~ /^Enter password:/
|
|
22
|
+
ch.send_data "#{yaml[rails_env]['password']}\n"
|
|
23
|
+
else
|
|
24
|
+
puts out
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
run "ln -nfs #{filename} #{backup_dir}/#{application}.latest"
|
|
29
|
+
|
|
30
|
+
logger.info "Backup successfull."
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
task :restore, :roles => :import do
|
|
34
|
+
backup_dir ||= "#{deploy_to}/backups"
|
|
35
|
+
|
|
36
|
+
filename = "#{backup_dir}/#{application}.latest"
|
|
37
|
+
text = capture "cat #{deploy_to}/current/config/database.yml"
|
|
38
|
+
yaml = YAML::load(text)
|
|
39
|
+
|
|
40
|
+
logger.info "Restoring from #{filename}..."
|
|
41
|
+
run "bzip2 -d < #{filename} |mysql -u #{yaml[rails_env]['username']} -p#{yaml[rails_env]['password']} -h #{yaml[rails_env]['host']} #{yaml[rails_env]['database']}" do |ch, stream, out|
|
|
42
|
+
puts out
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
logger.info "Restore successfull."
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
namespace :sync do
|
|
49
|
+
desc "Sync down the mysql db to local"
|
|
50
|
+
task :down, :roles => :app do
|
|
51
|
+
sync_dir ||= "#{deploy_to}/sync"
|
|
52
|
+
run "mkdir -p #{sync_dir}"
|
|
53
|
+
|
|
54
|
+
filename = "#{application}.dump.#{Time.now.strftime('%Y-%m-%d_%H-%M')}.sql.bz2"
|
|
55
|
+
text = capture "cat #{deploy_to}/current/config/database.yml"
|
|
56
|
+
yaml = YAML::load(text)
|
|
57
|
+
on_rollback { delete filename }
|
|
58
|
+
|
|
59
|
+
# Remote DB dump
|
|
60
|
+
run "mysqldump -u #{yaml[rails_env]['username']} -p #{yaml[rails_env]['database']} -h #{yaml[rails_env]['host']} | bzip2 -9 > #{sync_dir}/#{filename}" do |channel, stream, data|
|
|
61
|
+
if data =~ /^Enter password:/
|
|
62
|
+
channel.send_data "#{yaml[rails_env]['password']}\n"
|
|
63
|
+
else
|
|
64
|
+
puts data
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Download dump
|
|
69
|
+
download "#{sync_dir}/#{filename}", filename
|
|
70
|
+
|
|
71
|
+
run "rm #{sync_dir}/#{filename}"
|
|
72
|
+
|
|
73
|
+
# Local DB import
|
|
74
|
+
username, password, database = database_config('development')
|
|
75
|
+
system "bzip2 -d -c #{filename} | mysql -u #{username} --password='#{password}' #{database}; rm -f #{filename}"
|
|
76
|
+
system "rake db:migrate"
|
|
77
|
+
|
|
78
|
+
logger.important "sync database from the stage '#{stage}' to local finished"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#
|
|
82
|
+
# Reads the database credentials from the local config/database.yml file
|
|
83
|
+
# +db+ the name of the environment to get the credentials for
|
|
84
|
+
# Returns username, password, database
|
|
85
|
+
#
|
|
86
|
+
def database_config(db)
|
|
87
|
+
database = YAML::load_file('config/database.yml')
|
|
88
|
+
return database["#{db}"]['username'], database["#{db}"]['password'], database["#{db}"]['database']
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
before "deploy:setup", "sqlite:setup"
|
|
3
|
+
after "db:symlink", "sqlite:symlink"
|
|
4
|
+
|
|
5
|
+
namespace :sqlite do
|
|
6
|
+
desc "Setup Sqlite3 db"
|
|
7
|
+
task :setup do
|
|
8
|
+
run "mkdir -p #{shared_path}/db"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
namespace :sync do
|
|
12
|
+
desc "Sync down the production sqlite database to local development sqlite"
|
|
13
|
+
task :down do
|
|
14
|
+
download "#{shared_path}/db/#{rails_env}.sqlite3", "db/development.sqlite3", :via => :scp
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
desc "Sync up the development sqlite database to production sqlite"
|
|
18
|
+
task :up do
|
|
19
|
+
run "mkdir -p #{shared_path}/db"
|
|
20
|
+
upload "db/development.sqlite3", "#{shared_path}/db/#{rails_env}.sqlite3", :via => :scp
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
desc "Make symlink for shared database"
|
|
25
|
+
task :symlink do
|
|
26
|
+
run "ln -nfs #{shared_path}/db/#{rails_env}.sqlite3 #{release_path}/db/#{rails_env}.sqlite3"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'pathname'
|
|
3
|
+
|
|
4
|
+
Capistrano::Configuration.instance.load do
|
|
5
|
+
#
|
|
6
|
+
# Capistrano sync.rb task for syncing databases and directories between the
|
|
7
|
+
# local development environment and different multi_stage environments. You
|
|
8
|
+
# cannot sync directly between two multi_stage environments, always use your
|
|
9
|
+
# local machine as loop way.
|
|
10
|
+
#
|
|
11
|
+
# Author: Michael Kessler aka netzpirat
|
|
12
|
+
# Gist: 111597
|
|
13
|
+
#
|
|
14
|
+
# Released under the MIT license.
|
|
15
|
+
# Kindly sponsored by Screen Concept, www.screenconcept.ch
|
|
16
|
+
#
|
|
17
|
+
namespace :sync do
|
|
18
|
+
|
|
19
|
+
after "deploy:setup", "sync:setup"
|
|
20
|
+
|
|
21
|
+
desc <<-DESC
|
|
22
|
+
Creates the sync dir in shared path. The sync directory is used to keep
|
|
23
|
+
backups of database dumps and archives from synced directories. This task will
|
|
24
|
+
be called on 'deploy:setup'
|
|
25
|
+
DESC
|
|
26
|
+
task :setup do
|
|
27
|
+
run "cd #{shared_path}; mkdir sync"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
namespace :down do
|
|
31
|
+
|
|
32
|
+
desc <<-DESC
|
|
33
|
+
Syncs the database and declared directories from the selected multi_stage environment
|
|
34
|
+
to the local development environment. This task simply calls both the 'sync:down:db' and
|
|
35
|
+
'sync:down:fs' tasks.
|
|
36
|
+
DESC
|
|
37
|
+
task :default do
|
|
38
|
+
db and fs
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc <<-DESC
|
|
42
|
+
Syncs database from the selected mutli_stage environement to the local develoment environment.
|
|
43
|
+
The database credentials will be read from your local config/database.yml file and a copy of the
|
|
44
|
+
dump will be kept within the shared sync directory. The amount of backups that will be kept is
|
|
45
|
+
declared in the sync_backups variable and defaults to 5.
|
|
46
|
+
DESC
|
|
47
|
+
task :db, :roles => :db, :only => { :primary => true } do
|
|
48
|
+
# Use production on non-multistage
|
|
49
|
+
set :stage, 'production' unless exists?(:stage)
|
|
50
|
+
|
|
51
|
+
filename = "database.#{stage}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2"
|
|
52
|
+
on_rollback { delete "#{shared_path}/sync/#{filename}" }
|
|
53
|
+
|
|
54
|
+
# Remote DB dump
|
|
55
|
+
username, password, database, host = remote_database_config(stage)
|
|
56
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
57
|
+
run "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} | bzip2 -9 > #{shared_path}/sync/#{filename}" do |channel, stream, data|
|
|
58
|
+
puts data
|
|
59
|
+
end
|
|
60
|
+
purge_old_backups "database"
|
|
61
|
+
|
|
62
|
+
# Download dump
|
|
63
|
+
download "#{shared_path}/sync/#{filename}", filename
|
|
64
|
+
|
|
65
|
+
# Local DB import
|
|
66
|
+
username, password, database, host = database_config('development')
|
|
67
|
+
system "bzip2 -d -c #{filename} | mysql -u #{username} --password='#{password}' #{database}; rm -f #{filename}"
|
|
68
|
+
|
|
69
|
+
logger.important "sync database from the stage '#{stage}' to local finished"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
desc <<-DESC
|
|
73
|
+
Sync declared directories from the selected multi_stage environment to the local development
|
|
74
|
+
environment. The synced directories must be declared as an array of Strings with the sync_directories
|
|
75
|
+
variable. The path is relative to the rails root.
|
|
76
|
+
DESC
|
|
77
|
+
task :fs, :roles => :web, :once => true do
|
|
78
|
+
# Use production on non-multistage
|
|
79
|
+
set :stage, 'production' unless exists?(:stage)
|
|
80
|
+
|
|
81
|
+
server, port = host_and_port
|
|
82
|
+
|
|
83
|
+
Array(fetch(:sync_directories, [])).each do |syncdir|
|
|
84
|
+
unless File.directory? "#{syncdir}"
|
|
85
|
+
logger.info "create local '#{syncdir}' folder"
|
|
86
|
+
Dir.mkdir "#{syncdir}"
|
|
87
|
+
end
|
|
88
|
+
logger.info "sync #{syncdir} from #{server}:#{port} to local"
|
|
89
|
+
destination, base = Pathname.new(syncdir).split
|
|
90
|
+
system "rsync --verbose --archive --compress --copy-links --delete --stats --rsh='ssh -p #{port}' #{user}@#{server}:#{current_path}/#{syncdir} #{destination.to_s}"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
logger.important "sync filesystem from the stage '#{stage}' to local finished"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
namespace :kuhsaft do
|
|
97
|
+
|
|
98
|
+
desc <<-DESC
|
|
99
|
+
Syncs the database and declared directories from the selected multi_stage environment
|
|
100
|
+
to the local development environment. This task simply calls both the 'sync:down:kuhsaft:db' and
|
|
101
|
+
'sync:down:kuhsaft:fs' tasks.
|
|
102
|
+
DESC
|
|
103
|
+
task :default do
|
|
104
|
+
db
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
desc <<-DESC
|
|
108
|
+
Syncs database from the selected mutli_stage environement to the local develoment environment.
|
|
109
|
+
The database credentials will be read from your local config/database.yml file and a copy of the
|
|
110
|
+
dump will be kept within the shared sync directory. The amount of backups that will be kept is
|
|
111
|
+
declared in the sync_backups variable and defaults to 5.
|
|
112
|
+
DESC
|
|
113
|
+
task :db, :roles => :db, :only => { :primary => true } do
|
|
114
|
+
# Use production on non-multistage
|
|
115
|
+
set :stage, 'production' unless exists?(:stage)
|
|
116
|
+
|
|
117
|
+
filename = "database.kuhsaft.#{stage}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2"
|
|
118
|
+
on_rollback { delete "#{shared_path}/sync/#{filename}" }
|
|
119
|
+
|
|
120
|
+
# Remote DB dump
|
|
121
|
+
username, password, database, host = remote_database_config(stage)
|
|
122
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
123
|
+
run "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} pages localized_pages contents assets tags taggings | bzip2 -9 > #{shared_path}/sync/#{filename}" do |channel, stream, data|
|
|
124
|
+
puts data
|
|
125
|
+
end
|
|
126
|
+
purge_old_backups "database"
|
|
127
|
+
|
|
128
|
+
# Download dump
|
|
129
|
+
download "#{shared_path}/sync/#{filename}", filename
|
|
130
|
+
|
|
131
|
+
# Local DB import
|
|
132
|
+
username, password, database, host = database_config('development')
|
|
133
|
+
system "bzip2 -d -c #{filename} | mysql -u #{username} --password='#{password}' #{database}; rm -f #{filename}"
|
|
134
|
+
|
|
135
|
+
logger.important "sync database from the stage '#{stage}' to local finished"
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
namespace :up do
|
|
141
|
+
|
|
142
|
+
desc <<-DESC
|
|
143
|
+
Syncs the database and declared directories from the local development environment
|
|
144
|
+
to the selected multi_stage environment. This task simply calls both the 'sync:up:db' and
|
|
145
|
+
'sync:up:fs' tasks.
|
|
146
|
+
DESC
|
|
147
|
+
task :default do
|
|
148
|
+
db and fs
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
desc <<-DESC
|
|
152
|
+
Syncs database from the local develoment environment to the selected mutli_stage environement.
|
|
153
|
+
The database credentials will be read from your local config/database.yml file and a copy of the
|
|
154
|
+
dump will be kept within the shared sync directory. The amount of backups that will be kept is
|
|
155
|
+
declared in the sync_backups variable and defaults to 5.
|
|
156
|
+
DESC
|
|
157
|
+
task :db, :roles => :db, :only => { :primary => true } do
|
|
158
|
+
# Use production on non-multistage
|
|
159
|
+
set :stage, 'production' unless exists?(:stage)
|
|
160
|
+
|
|
161
|
+
filename = "database.all.#{stage}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2"
|
|
162
|
+
|
|
163
|
+
on_rollback do
|
|
164
|
+
delete "#{shared_path}/sync/#{filename}"
|
|
165
|
+
system "rm -f #{filename}"
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Make a backup before importing
|
|
169
|
+
username, password, database, host = remote_database_config(stage)
|
|
170
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
171
|
+
run "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} | bzip2 -9 > #{shared_path}/sync/#{filename}" do |channel, stream, data|
|
|
172
|
+
puts data
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Local DB export
|
|
176
|
+
filename = "dump.local.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2"
|
|
177
|
+
username, password, database, host = database_config('development')
|
|
178
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
179
|
+
system "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} | bzip2 -9 > #{filename}"
|
|
180
|
+
upload filename, "#{shared_path}/sync/#{filename}"
|
|
181
|
+
system "rm -f #{filename}"
|
|
182
|
+
|
|
183
|
+
# Remote DB import
|
|
184
|
+
username, password, database, host = remote_database_config(stage)
|
|
185
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
186
|
+
run "bzip2 -d -c #{shared_path}/sync/#{filename} | mysql -u #{username} --password='#{password}' #{host_option} #{database}; rm -f #{shared_path}/sync/#{filename}"
|
|
187
|
+
purge_old_backups "database.all"
|
|
188
|
+
|
|
189
|
+
logger.important "sync database from local to the stage '#{stage}' finished"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
desc <<-DESC
|
|
193
|
+
Sync declared directories from the local development environement to the selected multi_stage
|
|
194
|
+
environment. The synced directories must be declared as an array of Strings with the sync_directories
|
|
195
|
+
variable. The path is relative to the rails root.
|
|
196
|
+
DESC
|
|
197
|
+
task :fs, :roles => :web, :once => true do
|
|
198
|
+
# Use production on non-multistage
|
|
199
|
+
set :stage, 'production' unless exists?(:stage)
|
|
200
|
+
|
|
201
|
+
server, port = host_and_port
|
|
202
|
+
Array(fetch(:sync_directories, [])).each do |syncdir|
|
|
203
|
+
destination, base = Pathname.new(syncdir).split
|
|
204
|
+
if File.directory? "#{syncdir}"
|
|
205
|
+
# Make a backup
|
|
206
|
+
logger.info "backup #{syncdir}"
|
|
207
|
+
run "tar cjf #{shared_path}/sync/#{base}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.tar.bz2 #{current_path}/#{syncdir}"
|
|
208
|
+
purge_old_backups "#{base}"
|
|
209
|
+
else
|
|
210
|
+
logger.info "Create '#{syncdir}' directory"
|
|
211
|
+
run "mkdir #{current_path}/#{syncdir}"
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Sync directory up
|
|
215
|
+
logger.info "sync #{syncdir} to #{server}:#{port} from local"
|
|
216
|
+
system "rsync --verbose --archive --compress --keep-dirlinks --delete --stats --rsh='ssh -p #{port}' #{syncdir} #{user}@#{server}:#{current_path}/#{destination.to_s}"
|
|
217
|
+
end
|
|
218
|
+
logger.important "sync filesystem from local to the stage '#{stage}' finished"
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
namespace :kuhsaft do
|
|
222
|
+
|
|
223
|
+
desc <<-DESC
|
|
224
|
+
Syncs the database and declared directories from the local development environment
|
|
225
|
+
to the selected multi_stage environment. This task simply calls both the 'sync:up:kuhsaft:db' task.
|
|
226
|
+
DESC
|
|
227
|
+
task :default do
|
|
228
|
+
db
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
desc <<-DESC
|
|
232
|
+
Syncs database from the local develoment environment to the selected mutli_stage environement.
|
|
233
|
+
The database credentials will be read from your local config/database.yml file and a copy of the
|
|
234
|
+
dump will be kept within the shared sync directory. The amount of backups that will be kept is
|
|
235
|
+
declared in the sync_backups variable and defaults to 5.
|
|
236
|
+
DESC
|
|
237
|
+
task :db, :roles => :db, :only => { :primary => true } do
|
|
238
|
+
# Use production on non-multistage
|
|
239
|
+
set :stage, 'production' unless exists?(:stage)
|
|
240
|
+
|
|
241
|
+
filename = "database.kuhsaft.#{stage}.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2"
|
|
242
|
+
|
|
243
|
+
on_rollback do
|
|
244
|
+
delete "#{shared_path}/sync/#{filename}"
|
|
245
|
+
system "rm -f #{filename}"
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# Make a backup before importing
|
|
249
|
+
username, password, database, host = remote_database_config(stage)
|
|
250
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
251
|
+
run "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} pages localized_pages contents assets tags taggings | bzip2 -9 > #{shared_path}/sync/#{filename}" do |channel, stream, data|
|
|
252
|
+
puts data
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Local DB export
|
|
256
|
+
filename = "dump.local.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.bz2"
|
|
257
|
+
username, password, database, host = database_config('development')
|
|
258
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
259
|
+
system "mysqldump -u #{username} --password='#{password}' #{host_option} #{database} | bzip2 -9 > #{filename}"
|
|
260
|
+
upload filename, "#{shared_path}/sync/#{filename}"
|
|
261
|
+
system "rm -f #{filename}"
|
|
262
|
+
|
|
263
|
+
# Remote DB import
|
|
264
|
+
username, password, database, host = remote_database_config(stage)
|
|
265
|
+
host_option = host ? "--host='#{host}'" : ""
|
|
266
|
+
run "bzip2 -d -c #{shared_path}/sync/#{filename} | mysql -u #{username} --password='#{password}' #{host_option} #{database}; rm -f #{shared_path}/sync/#{filename}"
|
|
267
|
+
purge_old_backups "database.kuhsaft"
|
|
268
|
+
|
|
269
|
+
logger.important "sync database from local to the stage '#{stage}' finished"
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
#
|
|
276
|
+
# Reads the database credentials from the local config/database.yml file
|
|
277
|
+
# +db+ the name of the environment to get the credentials for
|
|
278
|
+
# Returns username, password, database
|
|
279
|
+
#
|
|
280
|
+
def database_config(db)
|
|
281
|
+
database = YAML::load_file('config/database.yml')
|
|
282
|
+
return database["#{db}"]['username'], database["#{db}"]['password'], database["#{db}"]['database'], database["#{db}"]['host']
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
#
|
|
286
|
+
# Reads the database credentials from the remote config/database.yml file
|
|
287
|
+
# +db+ the name of the environment to get the credentials for
|
|
288
|
+
# Returns username, password, database
|
|
289
|
+
#
|
|
290
|
+
def remote_database_config(db)
|
|
291
|
+
env = rails_env || db
|
|
292
|
+
config = capture "cat #{deploy_to}/current/config/database.yml"
|
|
293
|
+
database = YAML::load(config)
|
|
294
|
+
return database["#{env}"]['username'], database["#{env}"]['password'], database["#{env}"]['database'], database["#{env}"]['host']
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
#
|
|
298
|
+
# Returns the actual host name to sync and port
|
|
299
|
+
#
|
|
300
|
+
def host_and_port
|
|
301
|
+
return roles[:web].servers.first.host, ssh_options[:port] || roles[:web].servers.first.port || 22
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
#
|
|
305
|
+
# Purge old backups within the shared sync directory
|
|
306
|
+
#
|
|
307
|
+
def purge_old_backups(base)
|
|
308
|
+
count = fetch(:sync_backups, 5).to_i
|
|
309
|
+
backup_files = capture("ls -xt #{shared_path}/sync/#{base}*").split.reverse
|
|
310
|
+
if count >= backup_files.length
|
|
311
|
+
logger.important "no old backups to clean up"
|
|
312
|
+
else
|
|
313
|
+
logger.info "keeping #{count} of #{backup_files.length} sync backups"
|
|
314
|
+
delete_backups = (backup_files - backup_files.last(count)).join(" ")
|
|
315
|
+
try_sudo "rm -rf #{delete_backups}"
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
end
|
|
320
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
before "deploy:setup", "import:setup"
|
|
3
|
+
after "deploy:update_code", "import:symlink"
|
|
4
|
+
|
|
5
|
+
namespace :import do
|
|
6
|
+
desc "Create data directory"
|
|
7
|
+
task :setup, :roles => :import do
|
|
8
|
+
run "mkdir -p #{shared_path}/data"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc "Make symlink for data"
|
|
12
|
+
task :symlink, :roles => :import do
|
|
13
|
+
run "ln -nfs #{shared_path}/data #{release_path}/data"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc "Upload XLS file"
|
|
17
|
+
task :push, :roles => :import do
|
|
18
|
+
upload "data/Dossier-Katalog.xls", "#{shared_path}/data/dossiers.xls"
|
|
19
|
+
|
|
20
|
+
run "xls2csv -d utf-8 -c';' #{shared_path}/data/dossiers.xls > #{shared_path}/data/dossiers.csv"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
desc "Clone current environment database as import database."
|
|
24
|
+
task :seed_import_db, :roles => :import do
|
|
25
|
+
old_rails_env = rails_env
|
|
26
|
+
mysql.backup
|
|
27
|
+
|
|
28
|
+
set :rails_env, 'import'
|
|
29
|
+
mysql.restore
|
|
30
|
+
|
|
31
|
+
set :rails_env, old_rails_env
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
desc "Clone import database to current environment."
|
|
35
|
+
task :push_import_db, :roles => :import do
|
|
36
|
+
old_rails_env = rails_env
|
|
37
|
+
set :rails_env, 'import'
|
|
38
|
+
mysql.backup
|
|
39
|
+
|
|
40
|
+
set :rails_env, old_rails_env
|
|
41
|
+
mysql.restore
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
desc "Import CSV file."
|
|
45
|
+
task :import_csv, :roles => :import do
|
|
46
|
+
old_rails_env = rails_env
|
|
47
|
+
set :rails_env, 'import'
|
|
48
|
+
|
|
49
|
+
stream "cd #{deploy_to}/current && RAILS_ENV=#{rails_env} /usr/bin/env bundle exec rails runner 'Dossier.import_from_csv(\"data/dossiers.csv\")'"
|
|
50
|
+
set :rails_env, old_rails_env
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
desc "Do a full import."
|
|
54
|
+
task :default do
|
|
55
|
+
push
|
|
56
|
+
seed_import_db
|
|
57
|
+
import_csv
|
|
58
|
+
push_import_db
|
|
59
|
+
thinking_sphinx.rebuild
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
namespace :katalog do
|
|
3
|
+
desc "Create sphinx wordform and exception lists."
|
|
4
|
+
task :export_sphinx_lists, :roles => :app do
|
|
5
|
+
logger.info "Create sphinx wordform and exception lists."
|
|
6
|
+
run "cd #{deploy_to}/current && RAILS_ENV=#{rails_env} /usr/bin/env bundle exec rails runner 'SphinxAdminWordForm.send(:export_file); SphinxAdminException.send(:export_file)'"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
before "deploy:setup", "kuhsaft:setup"
|
|
3
|
+
after "deploy:update_code", "kuhsaft:symlink"
|
|
4
|
+
|
|
5
|
+
namespace :kuhsaft do
|
|
6
|
+
desc "Create uploads directory in capistrano shared path"
|
|
7
|
+
task :setup do
|
|
8
|
+
run "mkdir -p #{shared_path}/uploads"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc "Make symlink for shared uploads"
|
|
12
|
+
task :symlink do
|
|
13
|
+
run "ln -nfs #{shared_path}/uploads #{release_path}/uploads"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
before "deploy:setup", :new_relic
|
|
3
|
+
after "deploy:update_code", "new_relic:symlink"
|
|
4
|
+
|
|
5
|
+
namespace :new_relic do
|
|
6
|
+
desc "Create application yaml in capistrano shared path"
|
|
7
|
+
task :default do
|
|
8
|
+
run "mkdir -p #{shared_path}/config"
|
|
9
|
+
upload "config/newrelic.yml.example", "#{shared_path}/config/newrelic.yml", :via => :scp
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
desc "Make symlink for shared application yaml"
|
|
13
|
+
task :symlink do
|
|
14
|
+
run "ln -nfs #{shared_path}/config/newrelic.yml #{release_path}/config/newrelic.yml"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
before "deploy:setup", :db
|
|
3
|
+
before "deploy:migrate", "db:symlink"
|
|
4
|
+
|
|
5
|
+
namespace :db do
|
|
6
|
+
desc "Create database yaml in capistrano shared path"
|
|
7
|
+
task :default do
|
|
8
|
+
run "mkdir -p #{shared_path}/config"
|
|
9
|
+
upload "config/database.yml.example", "#{shared_path}/config/database.yml", :via => :scp
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
desc "Make symlink for shared database yaml"
|
|
13
|
+
task :symlink do
|
|
14
|
+
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
task :rake, :roles => :app do
|
|
18
|
+
run("cd #{deploy_to}/current && /usr/bin/env bundle exec rake #{rake_task} RAILS_ENV=#{rails_env}")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "Setup database"
|
|
22
|
+
task :setup, :roles => :app do
|
|
23
|
+
set :rake_task, 'db:setup'
|
|
24
|
+
rake
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
namespace :webistrano do
|
|
3
|
+
namespace :mod_rails do
|
|
4
|
+
desc "start mod_rails & Apache"
|
|
5
|
+
task :start, :roles => :app, :except => { :no_release => true } do
|
|
6
|
+
as = fetch(:runner, "app")
|
|
7
|
+
invoke_command "#{apache_init_script} start", :via => run_method, :as => as
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
desc "stop mod_rails & Apache"
|
|
11
|
+
task :stop, :roles => :app, :except => { :no_release => true } do
|
|
12
|
+
as = fetch(:runner, "app")
|
|
13
|
+
invoke_command "#{apache_init_script} stop", :via => run_method, :as => as
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc "restart mod_rails"
|
|
17
|
+
task :restart, :roles => :app, :except => { :no_release => true } do
|
|
18
|
+
as = fetch(:runner, "app")
|
|
19
|
+
restart_file = fetch(:mod_rails_restart_file, "#{deploy_to}/current/tmp/restart.txt")
|
|
20
|
+
invoke_command "touch #{restart_file}", :via => run_method, :as => as
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
namespace :deploy do
|
|
26
|
+
task :restart, :roles => :app, :except => { :no_release => true } do
|
|
27
|
+
webistrano.mod_rails.restart
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
task :start, :roles => :app, :except => { :no_release => true } do
|
|
31
|
+
webistrano.mod_rails.start
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
task :stop, :roles => :app, :except => { :no_release => true } do
|
|
35
|
+
webistrano.mod_rails.stop
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
before "deploy:setup", :settings_logic
|
|
3
|
+
before "db:symlink", "settings_logic:symlink"
|
|
4
|
+
|
|
5
|
+
namespace :settings_logic do
|
|
6
|
+
desc "Create application yaml in capistrano shared path"
|
|
7
|
+
task :default do
|
|
8
|
+
run "mkdir -p #{shared_path}/config"
|
|
9
|
+
upload "config/application.yml.example", "#{shared_path}/config/application.yml", :via => :scp
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
desc "Make symlink for shared application yaml"
|
|
13
|
+
task :symlink do
|
|
14
|
+
run "ln -nfs #{shared_path}/config/application.yml #{release_path}/config/application.yml"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Thinking Sphinx for Capistrano
|
|
2
|
+
require 'thinking_sphinx/deploy/capistrano'
|
|
3
|
+
|
|
4
|
+
Capistrano::Configuration.instance.load do
|
|
5
|
+
after "deploy:setup", "thinking_sphinx:setup"
|
|
6
|
+
|
|
7
|
+
after "deploy:migrate" do
|
|
8
|
+
thinking_sphinx.symlink
|
|
9
|
+
thinking_sphinx.rebuild
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
namespace :thinking_sphinx do
|
|
13
|
+
desc "Prepare for sphinx config"
|
|
14
|
+
task :setup, :roles => :app do
|
|
15
|
+
run "mkdir -p #{shared_path}/config/sphinx"
|
|
16
|
+
run "mkdir -p #{shared_path}/db/sphinx"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
desc "Make symlink for sphinx configs and data"
|
|
20
|
+
task :symlink, :roles => :app do
|
|
21
|
+
run "ln -nfs #{shared_path}/config/sphinx #{release_path}/config/sphinx"
|
|
22
|
+
run "ln -nfs #{shared_path}/db/sphinx #{release_path}/db/sphinx"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: capones_recipes
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 0.10.
|
|
5
|
+
version: 0.10.2
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Roman Simecek
|
|
@@ -112,21 +112,43 @@ extra_rdoc_files:
|
|
|
112
112
|
- LICENSE.txt
|
|
113
113
|
- README.rdoc
|
|
114
114
|
files:
|
|
115
|
+
- .document
|
|
115
116
|
- Capfile
|
|
117
|
+
- Gemfile
|
|
118
|
+
- Gemfile.lock
|
|
119
|
+
- LICENSE.txt
|
|
120
|
+
- README.rdoc
|
|
121
|
+
- Rakefile
|
|
122
|
+
- VERSION
|
|
123
|
+
- capones_recipes.gemspec
|
|
124
|
+
- config/deploy.rb
|
|
125
|
+
- config/deploy/production.rb
|
|
126
|
+
- config/deploy/staging.rb
|
|
116
127
|
- lib/capones_recipes.rb
|
|
117
128
|
- lib/cookbook/rails.rb
|
|
118
129
|
- lib/cookbook/rails31.rb
|
|
119
130
|
- lib/cookbook/wikisigns.rb
|
|
120
131
|
- lib/recipes/database.rb
|
|
132
|
+
- lib/recipes/database/mysql.rb
|
|
133
|
+
- lib/recipes/database/sqlite.rb
|
|
134
|
+
- lib/recipes/database/sync.rb
|
|
121
135
|
- lib/recipes/katalog.rb
|
|
136
|
+
- lib/recipes/katalog/import.rb
|
|
137
|
+
- lib/recipes/katalog/katalog.rb
|
|
122
138
|
- lib/recipes/kuhsaft.rb
|
|
139
|
+
- lib/recipes/kuhsaft/setup.rb
|
|
123
140
|
- lib/recipes/new_relic.rb
|
|
141
|
+
- lib/recipes/new_relic/new_relic.rb
|
|
124
142
|
- lib/recipes/rails.rb
|
|
143
|
+
- lib/recipes/rails/bundler.rb
|
|
144
|
+
- lib/recipes/rails/database_yml.rb
|
|
145
|
+
- lib/recipes/rails/mod_rails.rb
|
|
125
146
|
- lib/recipes/rails31.rb
|
|
147
|
+
- lib/recipes/rails31/rails31.rb
|
|
126
148
|
- lib/recipes/settings_logic.rb
|
|
149
|
+
- lib/recipes/settings_logic/settings_logic.rb
|
|
127
150
|
- lib/recipes/thinking_sphinx.rb
|
|
128
|
-
-
|
|
129
|
-
- README.rdoc
|
|
151
|
+
- lib/recipes/thinking_sphinx/thinking_sphinx.rb
|
|
130
152
|
has_rdoc: true
|
|
131
153
|
homepage: http://github.com/raskhadafi/capones-recipes
|
|
132
154
|
licenses:
|
|
@@ -141,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
141
163
|
requirements:
|
|
142
164
|
- - ">="
|
|
143
165
|
- !ruby/object:Gem::Version
|
|
144
|
-
hash:
|
|
166
|
+
hash: -2388807948387241719
|
|
145
167
|
segments:
|
|
146
168
|
- 0
|
|
147
169
|
version: "0"
|