capones_recipes 0.2.0 → 0.2.3
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/VERSION +1 -1
- data/capones_recipes.gemspec +13 -2
- data/lib/cookbook/rails.rb +5 -0
- data/lib/recipes/database/mysql.rb +91 -0
- data/lib/recipes/katalog/import.rb +60 -0
- data/lib/recipes/katalog/katalog.rb +7 -0
- data/lib/recipes/katalog.rb +1 -0
- data/lib/recipes/new_relic/new_relic.rb +17 -0
- data/lib/recipes/new_relic.rb +1 -0
- data/lib/recipes/settings_logic/settings_logic.rb +17 -0
- data/lib/recipes/settings_logic.rb +1 -0
- data/lib/recipes/thinking_sphinx/thinking_sphinx.rb +23 -0
- data/lib/recipes/thinking_sphinx.rb +1 -0
- metadata +13 -2
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.2. | 
| 1 | 
            +
            0.2.3
         | 
    
        data/capones_recipes.gemspec
    CHANGED
    
    | @@ -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. | 
| 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,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. | 
| 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:  | 
| 158 | 
            +
                  hash: 4274435668643909164
         | 
| 148 159 | 
             
                  segments: 
         | 
| 149 160 | 
             
                  - 0
         | 
| 150 161 | 
             
                  version: "0"
         |