Módulo: Mongoid::Tasks::base de datos
Overview
Módulo de utilidades para gestionar colecciones de base de datos, índices, particionado, etc. Se invoca desde tareas de Rake.
Resumen del método de instancia colapsar
-
#create_collections(models = ::Mongoid.models, force: false) ⇒ Object
Cree colecciones para cada modelo dadas las plantillas proporcionadas y que la clase no esté incrustada.
-
#create_indexes(models = ::Mongoid.models) ⇒ Array<Class>
Crear índices para cada modelo dado los globs proporcionados y la clase no está embebida.
-
#create_search_indexes(models = ::Mongoid.models, wait: true) ⇒ Object
Enviar solicitudes para que se creen los índices de búsqueda.
-
#remove_indexes(models = ::Mongoid.models) ⇒ arreglo<Class>
Remueva los índices de cada modelo según los globs proporcionados y la clase no esté integrada.
-
#remove_search_indexes(models = ::Mongoid.models) ⇒ Object
Remueve todos los índices de búsqueda de los modelos proporcionados.
-
#remove_undefined_indexes(models = ::Mongoid.models) ⇒ Hash{Clase => arreglo(Hash)}
Remueva los índices que existen en la base de datos pero no están especificados en los models.
-
# shard_collections(models = ::Mongoid.models) ⇒arreglo<Class>
Colecciones de particiones para modelos que declaran claves de partición.
-
#undefined_indexes(models = ::Mongoid.models) ⇒ Array<Hash>
Devuelve la lista de índices por model que existen en la base de datos, pero no están especificados en los models.
Detalles del método de instancia
#create_collections(models = ::Mongoid.models, force: false) ⇒ Objeto
Cree colecciones para cada modelo dadas las plantillas proporcionadas y que la clase no esté incrustada.
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 19 def crear_colecciones(modelos = ::Mongoid.modelos, fuerza: false) modelos.cada hacer |Modelo| si !Modelo. || Modelo.¿cíclico? Modelo.create_collection(fuerza: fuerza) logger.información("MONGOID: Se creó la colección para #{modelo}:") else logger.información("MONGOID: opciones de colección ignoradas en: #{modelo}, por favor define en el modelo raíz.") end rescate Excepción logger.Error "error al crear la colección para #{modelo}" propagar end end |
#create_indexes(models = ::Mongoid.models) ⇒ arreglo<Class>
Crear índices para cada modelo dado los globs proporcionados y la clase no está embebida.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 40 def create_indexes(modelos = ::Mongoid.modelos) modelos.cada hacer |Modelo| Next si Modelo.especificaciones_del_índice.¿vacío? si !Modelo. || Modelo.¿cíclico? Modelo.create_indexes logger.información("MONGOID: Índices creados en #{modelo}:") Modelo.especificaciones_del_índice.cada hacer |especificación| logger.información("MONGOID: Índice: #{spec.key}, Opciones: #{spec.}") end Modelo else logger.información("MONGOID: Índice ignorado en: #{modelo}, por favor, define en el modelo raíz.") nulo end end.compact end |
#create_search_indexes(models = ::Mongoid.models, wait: true) ⇒ Objeto
Envía solicitudes para que se creen los índices de búsqueda. Esto ocurrirá de forma asíncrona. Si "wait" es verdadero, el método se bloqueará mientras espera que se creen los índices.
66 67 68 69 70 71 72 73 74 75 76 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 66 def create_search_indexes(modelos = ::Mongoid.modelos, esperar: true) buscable = modelos.Seleccionar { |m| m.search_index_specs.any? } # poner en cola las solicitudes de creación de índices de búsqueda nombres_de_índices_por_modelo = buscable.each_with_object({}) hacer |Modelo, obj| logger.información("MONGOID: Creando índices de búsqueda en #{modelo}...") obj[Modelo] = Modelo.create_search_indexes end wait_for_search_indexes(nombres_de_índices_por_modelo) si esperar end |
#remove_indexes(models = ::Mongoid.models) ⇒ arreglo<Class>
Remueva los índices de cada modelo según los globs proporcionados y la clase no esté integrada.
139 140 141 142 143 144 145 146 147 148 149 150 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 139 def remove_indexes(modelos = ::Mongoid.modelos) modelos.cada hacer |Modelo| Next si Modelo. begin Modelo.remove_indexes rescate mongo::Error::OperationFailure Next end Modelo end.compact end |
#remove_search_indexes(models = ::Mongoid.models) ⇒ objeto
Remueve todos los índices de búsqueda de los modelos proporcionados.
156 157 158 159 160 161 162 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 156 def remove_search_indexes(modelos = ::Mongoid.modelos) modelos.cada hacer |Modelo| Next si Modelo. Modelo.remove_search_indexes end end |
#remove_undefined_indexes(models = ::Mongoid.models) ⇒ Hash{clase => arreglo(Hash)}
Remueva los índices que existen en la base de datos pero no están especificados en los models.
118 119 120 121 122 123 124 125 126 127 128 129 130 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 118 def eliminar_índices_indefinidos(modelos = ::Mongoid.modelos) undefined_indexes(modelos).cada hacer |Modelo, indexes| indexes.cada hacer |index| llave = index['key'].symbolize_keys Colección = Modelo.Colección Colección.indexes(sesión: Modelo.enviar(:_session)).drop_one(llave) logger.información( "MONGOID: Se eliminó el índice '#{índice['nombre']}' en la colección " + "'#{colección.nombre}' en la base de datos '#{colección.base de datos.nombre}'." ) end end end |
#shard_collections(models = ::Mongoid.models) ⇒ arreglo<Class>
Colecciones de particiones para modelos que declaran claves de partición.
Devuelve las clases de modelo que han tenido sus colecciones fragmentadas, incluyendo clases de modelo cuyas colecciones ya habían sido fragmentadas antes de la invocación de este método.
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 174 def colecciones de shards(modelos = ::Mongoid.modelos) modelos.map hacer |Modelo| Next si Modelo.shard_config.nil? si Modelo. && !Modelo.¿cíclico? logger.advertencia("MONGOID: #{modelo} tiene configuración de partición pero está embebido") Next end a menos que Modelo.Colección.clúster.particionado? || Modelo.Colección.clúster.balanceo_de_carga? logger.advertencia("MONGOID: #{model} tiene configuración de partición pero no está guardada en un clúster: #{model.colección.cluster.summary}") Next end La base de datos de la colección debe existir para ejecutar collStats. # Dependiendo de la versión del servidor, la propia colección también debe # existir. # MongoDB no tiene un comando para crear la base de datos; lo mejor # aproximación a ello es crear la colección que queremos. # En los servidores más antiguos, crear una colección que ya exista es # un error. # Además, 3.6 y potencialmente servidores más antiguos no proporcionan # el código de error cuando se les pide computar estadísticas de colección a un elemento inexistente # colección (https://jira.mongodb.org/browse/SERVER-50070). begin Modelo.Colección.database.Comando(collStats: Modelo.Colección.Nombre).primero rescate mongo::Error::OperationFailure => e # El código 26 es que la base de datos no existe. # El código 8 es una colección que no existe, desde 4.0. # En 3.6 y versiones anteriores, iguala el texto del mensaje de excepción. si e.Código == 26 || e.Código == 8 || (e.Código.nil? && e. =~ /no encontrado/) Modelo.Colección.Cree Modelo.Colección.database.Comando(collStats: Modelo.Colección.Nombre).primero else propagar end end stats = Modelo.Colección.database.Comando(collStats: Modelo.Colección.Nombre).primero si stats[particionado] logger.información("MONGOID: #{modelo.colección.namespace} ya está particionado para #{modelo}") Next Modelo end admin_db = Modelo.Colección.Cliente.Usar(Administrador).database begin admin_db.Comando(enableSharding: Modelo.Colección.database.Nombre) rescate mongo::Error::OperationFailure => e # El servidor 2.6 falla si el particionado ya está habilitado propagar a menos que e.Código == 23 || (e.Código.nil? && e. =~ /ya está activado/) # Nada end begin admin_db.Comando(shardCollection: Modelo.Colección.namespace, **Modelo.shard_config) rescate mongo::Error::OperationFailure => e logger.Error("MONGOID: No se pudo fragmentar la colección #{model.collection.namespace} para #{model}: #{e.class}: #{e}") Next end logger.información("MONGOID: colección particionada #{model.colección.namespace} para #{model}") Modelo end.compact end |
#undefined_indexes(models = ::Mongoid.models) ⇒ Arreglo<Hash>
Devuelve la lista de índices por model que existen en la base de datos, pero no están especificados en los models.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 85 def undefined_indexes(modelos = ::Mongoid.modelos) undefined_by_model = {} modelos.cada hacer |Modelo| Next si Modelo. begin Modelo.Colección.indexes(sesión: Modelo.enviar(:_session)).cada hacer |index| # ignore default index Next si index['nombre'] == '_id_' llave = index['key'].symbolize_keys especificación = Modelo.index_specification(llave, index['nombre']) Next si especificación # índice no especificado undefined_by_model[Modelo] ||= [] undefined_by_model[Modelo] << index end rescate mongo::Error::OperationFailure end end undefined_by_model end |