2011-10-28 11 views
5

Estamos en mongodb 2.0.0, mongo gem 1.4.1, mongo_mapper 0.9.2, rieles 3.0.6.Fallo de la operación de desmantelamiento para el modelo MongoMapper, no se puede eliminar/eliminar la clave del modelo

Nos encanta MongoMapper, pero necesitamos ayudar a resolver un desagradable problema: tenemos una clave heredada de algunas pruebas, pero al invocar obj.unset no se puede hacer nada.

Específicamente, estamos intentando eliminar una clave "id" (no "_id") porque está causando que MM trate obj.id como diferente de obj._id, lo que no queremos.

Después de la limpieza de la base de datos, nos encontramos con estos comandos desde un controlador que no hace otra cosa: (También tratamos de ejecutar el mismo código de la consola rieles, pero también falla.)

logger.info "#{Game.keys.keys.inspect}" 
Game.unset({}, :id) 
logger.info "#{Game.keys.keys.inspect}" 
Game.unset(:id) 
logger.info "#{Game.keys.keys.inspect}" 

de salida:

teclas
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"] 
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"] 
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"] 

actuales definidos en nuestro modelo de juego:

key :players, Array, :default => [] 
    key :player_index, Integer, :default => 0 
    key :puzzles, Array, :default => [] 
    key :puzzle_index, Integer, :default => 0 
    key :join_code, String, :default => nil 
    key :jackpot, Integer, :default => 0 
    key :log, Array, :default => [] 
    key :created_at, Time 
    key :updated_at, Time 
    key :ended_at, Time, :default => nil 

Ayuda?

Gracias!

+1

¿Por qué aún podría estar en Mongo 1.4.1? Hay una serie de errores y problemas de rendimiento en esa versión. El primer paso parece actualizar a la última versión de la base de datos y MM y luego ver si el problema persiste. –

+0

Creo que "mongo" se refiere a la versión de gema, 1.4.1 es reciente. Además, esta pregunta fue respondida en la lista de correo: http://groups.google.com/group/mongomapper/browse_thread/thread/20ea194868195c3e TL; DR unset solo funciona en la base de datos, pero MM siempre recuerda qué teclas ha visto y guarda nuevos documentos con ellos. Necesita volver a cargar el documento y/o reiniciar el servidor. Relacionado con el número 195 https://github.com/jnunemaker/mongomapper/issues/195 –

+0

Gracias, ambos. Sí, "mongo" se refiere a la gema. Actualizaremos la pregunta para aclarar esto. Plastic Chicken, tratamos de reiniciar el servidor de Mongo y el servidor de aplicaciones, pero tal vez también tengamos que volver a cargar el documento. ¡Gracias de nuevo! – Crashalot

Respuesta

0

Nos duele publicar la respuesta ya que esto solidifica nuestro estado como "idiotas, idiotas, tontos, noobs, fanáticos de Jay Leno", pero en caso de que alguien más se tope con el mismo problema: mientras nuestro directorio de modelos estaba limpio en el entorno de desarrollo, el directorio de modelo en el entorno de producción contenía archivos de prueba antiguos ... que contenía un modelo antiguo con la clave "id".

Obviamente, la eliminación de los archivos antiguos y los modelos antiguos lo resolvió todo, aunque nos quedamos con moretones asombrosos a nuestros egos y a nuestras cabezas (de golpes excesivos contra las paredes).

+0

:) Este es un buen aviso para alguien que depura un mongodb. – three

Cuestiones relacionadas