From e7a8b49ae30bce36846a5ab8f1fa2bb981100224 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 19 Nov 2013 11:51:42 +0100 Subject: add dump_design_docs to CouchRest::Model::Utils:Migrate This is similar to the migrations but instead of uploading the design documents to couch it stores them in tmp/database/design.json within the rails directory. database is the supposed database name without prefixes or suffixes design is the name of the design doc CouchRest model would have created The files also contain a couchrest checksum so couchrest can detect they are up to date. This commit also cleans up a few redundant things in the extension to CouchRest::Model:Utils::Migrate that we used to have. There's no need to loop through the 'normal' models in load_all_models_with_engines since load_all_models_without_engines already does that. We were also overwriting all_models_and_proxies with exactly the same code as in the original. --- core/lib/extensions/couchrest.rb | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'core/lib') diff --git a/core/lib/extensions/couchrest.rb b/core/lib/extensions/couchrest.rb index 91dfc1c..84cfbb3 100644 --- a/core/lib/extensions/couchrest.rb +++ b/core/lib/extensions/couchrest.rb @@ -47,28 +47,45 @@ module CouchRest def self.load_all_models_with_engines self.load_all_models_without_engines return unless defined?(Rails) - Dir[Rails.root + 'app/models/**/*.rb'].each do |path| - require path - end Dir[Rails.root + '*/app/models/**/*.rb'].each do |path| require path end end - def self.all_models_and_proxies - callbacks = migrate_each_model(find_models) - callbacks += migrate_each_proxying_model(find_proxying_models) - cleanup(callbacks) + class << self + alias_method_chain :load_all_models, :engines + end + + def dump_all_models + prepare_directory + find_models.each do |model| + model.design_docs.each do |design| + dump_design(model, design) + end + end end + protected + def dump_design(model, design) + dir = prepare_directory model.name.tableize + filename = design.id.sub('_design/','') + '.json' + puts dir + filename + design.checksum + File.open(dir + filename, "w") do |file| + file.write(JSON.pretty_generate(design.to_hash)) + end + end - class << self - alias_method_chain :load_all_models, :engines + def prepare_directory(dir = '') + dir = Rails.root + 'tmp' + 'designs' + dir + Dir.mkdir(dir) unless Dir.exists?(dir) + return dir end end end + end class ModelRailtie -- cgit v1.2.3 From cf68a79639861e69f61af85b43a3f72ed7763439 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 19 Nov 2013 15:04:14 +0100 Subject: couchrest:dump task will dump all design docs --- core/lib/tasks/leap_web_core_tasks.rake | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'core/lib') diff --git a/core/lib/tasks/leap_web_core_tasks.rake b/core/lib/tasks/leap_web_core_tasks.rake index ae5b79b..734fae9 100644 --- a/core/lib/tasks/leap_web_core_tasks.rake +++ b/core/lib/tasks/leap_web_core_tasks.rake @@ -1,4 +1,9 @@ -# desc "Explaining what the task does" -# task :leap_web_core do -# # Task goes here -# end +namespace :couchrest do + + desc "Dump all the design docs found in each model" + task :dump => :environment do + CouchRest::Model::Utils::Migrate.load_all_models + CouchRest::Model::Utils::Migrate.dump_all_models + end +end + -- cgit v1.2.3 From 7596b6dbfa38d52acd447982e03e26374fb0d747 Mon Sep 17 00:00:00 2001 From: Azul Date: Thu, 21 Nov 2013 12:49:25 +0100 Subject: rake tasks clean up expired tokens and sessions (#4568) --- core/lib/tasks/leap_web_core_tasks.rake | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'core/lib') diff --git a/core/lib/tasks/leap_web_core_tasks.rake b/core/lib/tasks/leap_web_core_tasks.rake index 734fae9..ec6abac 100644 --- a/core/lib/tasks/leap_web_core_tasks.rake +++ b/core/lib/tasks/leap_web_core_tasks.rake @@ -7,3 +7,19 @@ namespace :couchrest do end end +namespace :cleanup do + + desc "Cleanup all expired session documents" + task :sessions => :environment do + # make sure this is the same as in + # config/initializers/session_store.rb + store = CouchRest::Session::Store.new expire_after: 1800 + store.cleanup(store.expired) + end + + desc "Cleanup all expired tokens" + task :tokens => :environment do + Token.destroy_all_expired + end +end + -- cgit v1.2.3 From 8fba6fae51e96ec3330896d107ab01fce2e322d9 Mon Sep 17 00:00:00 2001 From: Azul Date: Thu, 12 Dec 2013 10:15:43 +0100 Subject: reraise with a better explaination on couch failure Removing our own error class for this. It interferes with couch_rest_session_store tryign to catch the same errors. --- core/lib/extensions/couchrest.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'core/lib') diff --git a/core/lib/extensions/couchrest.rb b/core/lib/extensions/couchrest.rb index 84cfbb3..7450f59 100644 --- a/core/lib/extensions/couchrest.rb +++ b/core/lib/extensions/couchrest.rb @@ -23,10 +23,6 @@ module CouchRest end end - module Errors - class ConnectionFailed < CouchRestModelError; end - end - module Connection module ClassMethods @@ -36,7 +32,9 @@ module CouchRest rescue RestClient::Unauthorized, Errno::EHOSTUNREACH, Errno::ECONNREFUSED => e - raise CouchRest::Model::Errors::ConnectionFailed.new(e.to_s) + message = "Could not connect to couch database #{db} due to #{e.to_s}" + Rails.logger.warn message + raise e.class.new(message) end end -- cgit v1.2.3 From 72087656e5092fd744f4314c9a0e91825399fefc Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 13 Dec 2013 11:16:11 +0100 Subject: proceed even if the couch is unreachable * in case the user has a session id, keep it but proceed without a session * in case we can't initialize the models proceed * if APP_CONFIG[:reraise_errors] is set we'll crash instead in the latter case default to reraise errors in dev and test environments. --- core/lib/extensions/couchrest.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/lib') diff --git a/core/lib/extensions/couchrest.rb b/core/lib/extensions/couchrest.rb index 7450f59..9f27c3a 100644 --- a/core/lib/extensions/couchrest.rb +++ b/core/lib/extensions/couchrest.rb @@ -34,7 +34,7 @@ module CouchRest Errno::ECONNREFUSED => e message = "Could not connect to couch database #{db} due to #{e.to_s}" Rails.logger.warn message - raise e.class.new(message) + raise e.class.new(message) if APP_CONFIG[:reraise_errors] end end -- cgit v1.2.3 From 95bd5d46095c3552a31cf719adab1c84971b95e8 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 17 Dec 2013 11:37:37 +0100 Subject: catch all rest client exceptions during initialization --- core/lib/extensions/couchrest.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/lib') diff --git a/core/lib/extensions/couchrest.rb b/core/lib/extensions/couchrest.rb index 9f27c3a..a9a195e 100644 --- a/core/lib/extensions/couchrest.rb +++ b/core/lib/extensions/couchrest.rb @@ -29,7 +29,7 @@ module CouchRest def use_database(db) @database = prepare_database(db) - rescue RestClient::Unauthorized, + rescue RestClient::Exception, Errno::EHOSTUNREACH, Errno::ECONNREFUSED => e message = "Could not connect to couch database #{db} due to #{e.to_s}" -- cgit v1.2.3