capones_recipes 0.2.0 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.3
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{capones_recipes}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roman Simecek"]
@@ -28,14 +28,25 @@ Gem::Specification.new do |s|
28
28
  "capones_recipes.gemspec",
29
29
  "config/deploy.rb",
30
30
  "lib/capones_recipes.rb",
31
+ "lib/cookbook/rails.rb",
31
32
  "lib/recipes/database.rb",
33
+ "lib/recipes/database/mysql.rb",
32
34
  "lib/recipes/database/sqlite.rb",
33
35
  "lib/recipes/database/sync.rb",
36
+ "lib/recipes/katalog.rb",
37
+ "lib/recipes/katalog/import.rb",
38
+ "lib/recipes/katalog/katalog.rb",
39
+ "lib/recipes/new_relic.rb",
40
+ "lib/recipes/new_relic/new_relic.rb",
34
41
  "lib/recipes/rails.rb",
35
42
  "lib/recipes/rails/database_yml.rb",
36
43
  "lib/recipes/rails/mod_rails.rb",
37
44
  "lib/recipes/rails31.rb",
38
- "lib/recipes/rails31/rails31.rb"
45
+ "lib/recipes/rails31/rails31.rb",
46
+ "lib/recipes/settings_logic.rb",
47
+ "lib/recipes/settings_logic/settings_logic.rb",
48
+ "lib/recipes/thinking_sphinx.rb",
49
+ "lib/recipes/thinking_sphinx/thinking_sphinx.rb"
39
50
  ]
40
51
  s.homepage = %q{http://github.com/raskhadafi/capones-recipes}
41
52
  s.licenses = ["MIT"]
@@ -0,0 +1,5 @@
1
+ require 'capistrano'
2
+ require 'capistrano/cli'
3
+ require 'capistrano_colors'
4
+
5
+ load File.join(File.dirname(__FILE__), '../recipes/rails.rb')
@@ -0,0 +1,91 @@
1
+ # MySQL Backup/Restore tasks
2
+ #
3
+ # Based on code from:
4
+ # * http://snippets.aktagon.com/snippets/20-Capistrano-2-task-for-backing-up-your-MySQL-production-database-before-each-deployment
5
+ # * http://www.martin-probst.com/blog/2007/11/20/mysql-backup-restore-task-for-capistrano/
6
+
7
+ namespace :mysql do
8
+ task :backup, :roles => :import do
9
+ backup_dir ||= "#{deploy_to}/backups"
10
+ run "mkdir -p #{backup_dir}"
11
+
12
+ filename = "#{backup_dir}/#{application}.dump.#{Time.now.strftime('%Y-%m-%d_%H-%M')}.sql.bz2"
13
+ text = capture "cat #{deploy_to}/current/config/database.yml"
14
+ yaml = YAML::load(text)
15
+
16
+ on_rollback { run "rm #{filename}" }
17
+
18
+ logger.info "Backing up to #{filename}..."
19
+ run "mysqldump -u #{yaml[rails_env]['username']} -p #{yaml[rails_env]['database']} -h #{yaml[rails_env]['host']}| bzip2 -c > #{filename}" do |ch, stream, out|
20
+ if out =~ /^Enter password:/
21
+ ch.send_data "#{yaml[rails_env]['password']}\n"
22
+ else
23
+ puts out
24
+ end
25
+ end
26
+
27
+ run "ln -nfs #{filename} #{backup_dir}/#{application}.latest"
28
+
29
+ logger.info "Backup successfull."
30
+ end
31
+
32
+ task :restore, :roles => :import do
33
+ backup_dir ||= "#{deploy_to}/backups"
34
+
35
+ filename = "#{backup_dir}/#{application}.latest"
36
+ text = capture "cat #{deploy_to}/current/config/database.yml"
37
+ yaml = YAML::load(text)
38
+
39
+ logger.info "Restoring from #{filename}..."
40
+ 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|
41
+ puts out
42
+ end
43
+
44
+ logger.info "Restore successfull."
45
+ end
46
+
47
+ namespace :sync do
48
+ desc "Sync down the mysql db to local"
49
+ task :down, :roles => :app do
50
+ sync_dir ||= "#{deploy_to}/sync"
51
+ run "mkdir -p #{sync_dir}"
52
+
53
+ filename = "#{application}.dump.#{Time.now.strftime('%Y-%m-%d_%H-%M')}.sql.bz2"
54
+ text = capture "cat #{deploy_to}/current/config/database.yml"
55
+ yaml = YAML::load(text)
56
+ on_rollback { delete filename }
57
+
58
+ # Remote DB dump
59
+ 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|
60
+ if data =~ /^Enter password:/
61
+ channel.send_data "#{yaml[rails_env]['password']}\n"
62
+ else
63
+ puts data
64
+ end
65
+ end
66
+
67
+ # Download dump
68
+ download "#{sync_dir}/#{filename}", filename
69
+
70
+ run "rm #{sync_dir}/#{filename}"
71
+
72
+ # Local DB import
73
+ username, password, database = database_config('development')
74
+ system "bzip2 -d -c #{filename} | mysql -u #{username} --password='#{password}' #{database}; rm -f #{filename}"
75
+ system "rake db:migrate"
76
+
77
+ logger.important "sync database from the stage '#{stage}' to local finished"
78
+ end
79
+
80
+ #
81
+ # Reads the database credentials from the local config/database.yml file
82
+ # +db+ the name of the environment to get the credentials for
83
+ # Returns username, password, database
84
+ #
85
+ def database_config(db)
86
+ database = YAML::load_file('config/database.yml')
87
+ return database["#{db}"]['username'], database["#{db}"]['password'], database["#{db}"]['database']
88
+ end
89
+ end
90
+
91
+ end
@@ -0,0 +1,60 @@
1
+ before "deploy:setup", "import:setup"
2
+ after "deploy:update_code", "import:symlink"
3
+
4
+ namespace :import do
5
+ desc "Create data directory"
6
+ task :setup, :roles => :import do
7
+ run "mkdir -p #{shared_path}/data"
8
+ end
9
+
10
+ desc "Make symlink for data"
11
+ task :symlink, :roles => :import do
12
+ run "ln -nfs #{shared_path}/data #{release_path}/data"
13
+ end
14
+
15
+ desc "Upload XLS file"
16
+ task :push, :roles => :import do
17
+ upload "data/Dossier-Katalog.xls", "#{shared_path}/data/dossiers.xls"
18
+
19
+ run "xls2csv -d utf-8 -c';' #{shared_path}/data/dossiers.xls > #{shared_path}/data/dossiers.csv"
20
+ end
21
+
22
+ desc "Clone current environment database as import database."
23
+ task :seed_import_db, :roles => :import do
24
+ old_rails_env = rails_env
25
+ mysql.backup
26
+
27
+ set :rails_env, 'import'
28
+ mysql.restore
29
+
30
+ set :rails_env, old_rails_env
31
+ end
32
+
33
+ desc "Clone import database to current environment."
34
+ task :push_import_db, :roles => :import do
35
+ old_rails_env = rails_env
36
+ set :rails_env, 'import'
37
+ mysql.backup
38
+
39
+ set :rails_env, old_rails_env
40
+ mysql.restore
41
+ end
42
+
43
+ desc "Import CSV file."
44
+ task :import_csv, :roles => :import do
45
+ old_rails_env = rails_env
46
+ set :rails_env, 'import'
47
+
48
+ stream "cd #{deploy_to}/current && RAILS_ENV=#{rails_env} /usr/bin/env bundle exec rails runner 'Dossier.import_from_csv(\"data/dossiers.csv\")'"
49
+ set :rails_env, old_rails_env
50
+ end
51
+
52
+ desc "Do a full import."
53
+ task :default do
54
+ push
55
+ seed_import_db
56
+ import_csv
57
+ push_import_db
58
+ thinking_sphinx.rebuild
59
+ end
60
+ end
@@ -0,0 +1,7 @@
1
+ namespace :katalog do
2
+ desc "Create sphinx wordform and exception lists."
3
+ task :export_sphinx_lists, :roles => :app do
4
+ logger.info "Create sphinx wordform and exception lists."
5
+ run "cd #{deploy_to}/current && RAILS_ENV=#{rails_env} /usr/bin/env bundle exec rails runner 'SphinxAdminWordForm.send(:export_file); SphinxAdminException.send(:export_file)'"
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ Dir.glob(File.join(File.dirname(__FILE__), '/katalog/*.rb')).sort.each { |f| load f }
@@ -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 @@
1
+ Dir.glob(File.join(File.dirname(__FILE__), '/new_relic/*.rb')).sort.each { |f| load f }
@@ -0,0 +1,17 @@
1
+ Capistrano::Configuration.instance.load do
2
+ before "deploy:setup", :settings_logic
3
+ after "deploy:update_code", "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 @@
1
+ Dir.glob(File.join(File.dirname(__FILE__), '/settings_logic/*.rb')).sort.each { |f| load f }
@@ -0,0 +1,23 @@
1
+ # Thinking Sphinx for Capistrano
2
+ require 'thinking_sphinx/deploy/capistrano'
3
+
4
+ after "deploy:setup", "thinking_sphinx:setup"
5
+
6
+ after "deploy:migrate" do
7
+ thinking_sphinx.symlink
8
+ thinking_sphinx.rebuild
9
+ end
10
+
11
+ namespace :thinking_sphinx do
12
+ desc "Prepare for sphinx config"
13
+ task :setup, :roles => :app do
14
+ run "mkdir -p #{shared_path}/config/sphinx"
15
+ run "mkdir -p #{shared_path}/db/sphinx"
16
+ end
17
+
18
+ desc "Make symlink for sphinx configs and data"
19
+ task :symlink, :roles => :app do
20
+ run "ln -nfs #{shared_path}/config/sphinx #{release_path}/config/sphinx"
21
+ run "ln -nfs #{shared_path}/db/sphinx #{release_path}/db/sphinx"
22
+ end
23
+ end
@@ -0,0 +1 @@
1
+ Dir.glob(File.join(File.dirname(__FILE__), '/thinking_sphinx/*.rb')).sort.each { |f| load f }
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: capones_recipes
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.0
5
+ version: 0.2.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Roman Simecek
@@ -122,14 +122,25 @@ files:
122
122
  - capones_recipes.gemspec
123
123
  - config/deploy.rb
124
124
  - lib/capones_recipes.rb
125
+ - lib/cookbook/rails.rb
125
126
  - lib/recipes/database.rb
127
+ - lib/recipes/database/mysql.rb
126
128
  - lib/recipes/database/sqlite.rb
127
129
  - lib/recipes/database/sync.rb
130
+ - lib/recipes/katalog.rb
131
+ - lib/recipes/katalog/import.rb
132
+ - lib/recipes/katalog/katalog.rb
133
+ - lib/recipes/new_relic.rb
134
+ - lib/recipes/new_relic/new_relic.rb
128
135
  - lib/recipes/rails.rb
129
136
  - lib/recipes/rails/database_yml.rb
130
137
  - lib/recipes/rails/mod_rails.rb
131
138
  - lib/recipes/rails31.rb
132
139
  - lib/recipes/rails31/rails31.rb
140
+ - lib/recipes/settings_logic.rb
141
+ - lib/recipes/settings_logic/settings_logic.rb
142
+ - lib/recipes/thinking_sphinx.rb
143
+ - lib/recipes/thinking_sphinx/thinking_sphinx.rb
133
144
  has_rdoc: true
134
145
  homepage: http://github.com/raskhadafi/capones-recipes
135
146
  licenses:
@@ -144,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
155
  requirements:
145
156
  - - ">="
146
157
  - !ruby/object:Gem::Version
147
- hash: -2740591684227700900
158
+ hash: 4274435668643909164
148
159
  segments:
149
160
  - 0
150
161
  version: "0"