require 'uri' require 'net/http' namespace :sync_eudcoder_count do desc "every one day at 12pm sync educoder user_count, shixun_count, school_count, projects_count" task :sync_count => :environment do Rails.logger.info("###########_______Begin_to_sync_educoder_count________#####") home = Home&.first if home.present? begin api_host = "#{Redmine::Configuration['sync_educoder_count_url']}" api_key = "#{Redmine::Configuration['sync_educoder_key']}" url = "#{api_host}/api/edu_apis/edu_data_info.json" sync_json = { "private_token": api_key } uri = URI.parse(url) if api_host http = Net::HTTP.new(uri.hostname, uri.port) if api_host.include?("https://") http.use_ssl = true end response = http.send_request('GET', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'}) response_body = JSON.parse(response.body) if response_body["status"] == 0 data_count = response_body["data"] home.users_count = home.users_count + data_count["user_count"].to_i home.projects_count = home.projects_count + data_count["project_count"].to_i home.practical_training_projects_count = home.practical_training_projects_count + data_count["shixun_count"].to_i home.scholls_count = home.scholls_count + data_count["school_count"].to_i home.save! end end rescue => e Rails.logger.info("#######__sync_educoder_count_failed_########{e}") end end Rails.logger.info("###########_______End_to_sync_educoder_count________#####") end end