# encoding: utf-8 # ================================================================= # move archives from main site to other sites depending on category # ================================================================= require 'mongo' include Mongo DB_BASE_NAME = "production" CATEGORIES = { 'TNR' => 3, 'DOC' => 1, 'PROPERTY' => 5, 'CASHIER' => 2, 'CON' => 10 } main_db = MongoClient.new("localhost", 27017).db("#{DB_BASE_NAME}_#{0}") main_categories = main_db["archive_file_categories"] main_archive_files = main_db["archive_files"] main_archive_file_multiples = main_db["archive_file_multiples"] CATEGORIES.each do |key, number| # set the target DB target_db = MongoClient.new("localhost", 27017).db("#{DB_BASE_NAME}_#{number}") target_categories = target_db["archive_file_categories"] target_archive_files = target_db["archive_files"] target_archive_file_multiples = target_db["archive_file_multiples"] if main_cat = main_categories.find_one(key: key) # get or create category category_id = \ if cat = target_categories.find_one(key: main_cat['key']) cat['_id'] else copy_category = main_cat.clone copy_category['_id'] = BSON::ObjectId.new copy_category['create_user_id'] = nil copy_category['update_user_id'] = nil target_categories.save copy_category end main_archive_files.find(archive_file_category_id: main_cat['_id']).each do |archive_file| # copy archive_file copy_archive_file = archive_file.clone copy_archive_file['_id'] = BSON::ObjectId.new copy_archive_file['create_user_id'] = nil copy_archive_file['update_user_id'] = nil copy_archive_file['tagged_ids'] = [] copy_archive_file['user_ids'] = nil copy_archive_file['archive_file_category_id'] = category_id target_archive_files.save copy_archive_file main_archive_file_multiples.find(archive_file_id: archive_file['_id']).each do |archive_file_multiple| # copy archive_file_multiples copy_archive_file_multiple = archive_file_multiple.clone copy_archive_file_multiple['_id'] = BSON::ObjectId.new copy_archive_file_multiple['create_user_id'] = nil copy_archive_file_multiple['update_user_id'] = nil copy_archive_file_multiple['archive_file_id'] = copy_archive_file['_id'] # copy gridfs file main_grid = Mongo::GridFileSystem.new(main_db) file = main_grid.open("assets/archive_file_multiple/file/#{archive_file_multiple['_id']}/#{archive_file_multiple['file']}", 'r') target_grid = Mongo::GridFileSystem.new(target_db) target_grid.open("assets/archive_file_multiple/file/#{copy_archive_file_multiple['_id']}/#{copy_archive_file_multiple['file']}", 'w') do |f| f.write file end target_archive_file_multiples.save copy_archive_file_multiple end end end end