Le logiciel d'expérience sacred a été exécuté sans MongoDB en arrière-plan avec un mongo-observer configuré. Quand il a essayé d'écrire les paramètres à MongoDB, cela a échoué, la création du fichier /tmp/sacred_mongo_fail__eErwU.pickle
, avec le messageComment importer le fichier pickle si sacré n'a pas réussi à se connecter à MongoDB
Warning: saving to MongoDB failed! Stored experiment entry in /tmp/sacred_mongo_fail__eErwU.pickle
Traceback (most recent calls WITHOUT Sacred internals):
File "/usr/local/lib/python2.7/dist-packages/sacred/observers/mongo.py", line 127, in started_event
self.run_entry[experiment][sources] = self.save_sources(ex_info)
File "/usr/local/lib/python2.7/dist-packages/sacred/observers/mongo.py", line 239, in save_sources
file = self.fs.find_one({filename: abs_path, md5: md5})
File "/usr/local/lib/python2.7/dist-packages/gridfs/__init__.py", line 261, in find_one
for f in self.find(filter, *args, **kwargs):
File "/usr/local/lib/python2.7/dist-packages/gridfs/grid_file.py", line 658, in next
next_file = super(GridOutCursor, self).next()
File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 1114, in next
if len(self.__data) or self._refresh():
File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 1036, in _refresh
self.__collation))
File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 873, in __send_message
**kwargs)
File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 888, in _send_message_with_response
server = topology.select_server(selector)
File "/usr/local/lib/python2.7/dist-packages/pymongo/topology.py", line 214, in select_server
address))
File "/usr/local/lib/python2.7/dist-packages/pymongo/topology.py", line 189, in select_servers
self._error_message(selector))
ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
Comment ce fichier cornichon peut être importé dans MongoDB manuellement?
J'ai l'impression que cette réponse est sur la bonne voie, mais cela n'a pas fonctionné pour moi. Pour commencer, mon expérience dans le fichier pickle avait déjà un champ '_id', et la commande open a besoin de l'argument 'rb' pour s'ouvrir comme binaire dans python3 ... mais même avec ça, même si la commande insert_one ne retourne pas une erreur, il ne met pas réellement à jour l'enregistrement (existant) dans la base de données. Des idées? – clemej
@clemej: si le '_id' existe déjà, vous pouvez' find_one_and_update'. Voir https://stackoverflow.com/a/46608956/1587329 etc. –