web-dev-qa-db-fra.com

MongoDB échec de la mongorestore: locale :: facet :: _ nom S_create_c_locale non valide

J'ai créé un dump avec mongodump sur l'ordinateur A (serveur Ubuntu 12.04). Je l'ai déplacé vers l'ordinateur B (serveur Ubuntu 12.04) et j'ai tapé:

mongorestore -db nom_base --drop chemin_base_db

Cela a échoué et il a rapporté:

connecté à: 127.0.0.1
se termine après avoir lancé une instance de 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale nom non valide
Avorté

J'ai déjà réussi cette opération auparavant et ce comportement étrange ne s'est jamais produit. Que dois-je faire pour résoudre ce problème?

101
Luca Anceschi

En réalité, il n’est pas strictement lié à MongoDB. D'une manière ou d'une autre, la langue sur l'ordinateur B n'a pas été définie correctement. J'ai réussi à le réparer en tapant:

Sudo locale-gen en_US en_US.UTF-8
Sudo locale-gen it_IT it_IT.UTF-8
Sudo locale-gen xx_xx xx_XX.UTF-8 ...
Sudo dpkg-reconfigure locales

Ces commandes vont générer et configurer les paramètres régionaux nécessaires. Après ces étapes, mongorestore a repris son travail habituel.

51
Luca Anceschi

Sur ma distribution, "locale-gen" n'était pas installé et il ne me restait plus qu'à définir la variable d'environnement LC_ALL. donc la commande suivante l'a corrigé:

export LC_ALL="en_US.UTF-8"

j'espère que cela aidera quelqu'un d'autre ...

254
keisar

Exporter LC_ALL="en_US.UTF-8" ne fonctionne que si vous avez le en_US locale installée. Si vous voulez éviter d'installer le paquet locales (ou son équivalent sur des distributions autres que les dérivés de Debian), vous pouvez utiliser à la place:

export LC_ALL=C.UTF-8

qui ne nécessitera aucune donnée de localisation supplémentaire.

15
josch

Si vous utilisez Mac OSX et SSH, cela peut être généré par une erreur de LC_CTYPE.

$ locale 
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Désélectionner le mauvais var.

$ unset LC_CTYPE 

Vérifiez si les paramètres régionaux fonctionnent correctement.

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Maintenant, le mongo devrait également faire l'affaire.

10
user1219736

Pour rendre le correctif permanent, vous pouvez éditer l’un de ces fichiers:

  • Sudo vim/etc/default/locale
  • Sudo vim/etc/environment

Et ajoutez la ligne LC_ALL="en_US.UTF-8"

10
Sebastien Lorber

Vous avez le même problème sur debian 7 sans que locale-gen (commande introuvable) soit installée.

J'ai résolu de cette façon:

su
apt-get install locales
dpkg-reconfigure locales # select locales you want!

Maintenant, mongodb devrait commencer.

Source

9
Daniele Brugnara