namespace :db do
def exec_task(task, args) Rake::Task[task].reenable Rake::Task[task].invoke(args) end def db_operation(operator) task_name = "db:#{operator}" exec_task(task_name, 'crawl_station') Dir["#{CrawlStation.root}/module/*"].each do |dir| module_name = dir.split('/').last exec_task(task_name, module_name) end end desc 'db:create[module_name] if module_name is nil, create all module databases' task :create, [:module_name] do |_t, args| m_name = args[:module_name] if m_name.nil? CS.logger.debug 'db create all database' db_operation(:create) CS.logger.debug 'db create all done' else m_name = nil if m_name == 'crawl_station' CS.logger.debug("create database #{m_name}") CrawlStation::Utils.create_database(m_name) CS.logger.debug("create database #{m_name} done") end end desc 'db:migrate[module_name] if module_name is nil, migrate all module migrations' task :migrate, [:module_name] => :environment do |_t, args| version = ENV['VERSION'] module_name = args[:module_name] if module_name.nil? CS.logger.debug 'db migrate all migration' db_operation(:migrate) CS.logger.debug 'db migrate all done' else path = "#{CrawlStation::Utils.module_path(module_name)}/db/migrate" path = "#{CrawlStation::Utils.gem_path}/db/migrate" if module_name == 'crawl_station' ActiveRecord::Migrator.migrate(path, version ? version.to_i : nil) end end task :environment, [:module_name] do |_t, args| config = CrawlStation::Utils.database_config args[:module_name] ActiveRecord::Base.logger = CrawlStation.logger ActiveRecord::Base.establish_connection config end
end