103 votes

Echec de MongoDB mongorestore : locale::facet::_S_create_c_locale nom non valide

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

mongorestore -db nom_db --drop chemin_dump_db

Il a échoué et a fait un 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à effectué cette opération avec succès et ce comportement étrange ne s'est jamais produit. Que dois-je faire pour résoudre ce problème ?

259voto

keisar Points 943

Sur ma distribution, "locale-gen" n'était pas installé et il s'est avéré que tout ce que j'avais à faire était de définir la variable d'environnement LC_ALL. La commande suivante a donc réglé le problème :

export LC_ALL="en_US.UTF-8"

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

3 votes

Cela fonctionne bien dans une session de terminal, mais si vous cherchez une solution permanente, vous préférerez vérifier stackoverflow.com/a/32762296/82609

5 votes

Merci @SebastienLorber, dans mon cas j'ai ajouté cette ligne à mon ~/.profile ou ~/.bashrc et cela a fonctionné de façon permanente.

0 votes

Hmmm, je suis venu ici juste avant de lire que le réglage de LC_ALL est fortement déconseillé : wiki.debian.org/Locale

52voto

Luca Anceschi Points 653

En fait, ce n'est pas strictement lié à MongoDB. La langue de 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 locales nécessaires. Après ces étapes, mongorestore a recommencé à fonctionner comme d'habitude.

2 votes

Cela m'a aidé, mais j'ai aussi dû faire des modifications /etc/locale.gen et activez les locales nécessaires (sur arch linux)

0 votes

Cela a résolu le problème pour moi aussi. Je suis sur Lubuntu 12.04 x86.

1 votes

Mais pourquoi cela se produit-il, y a-t-il des raisons spécifiques pour lesquelles mongodump / restore dépend des langues locales ?

17voto

josch Points 790

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

export LC_ALL=C.UTF-8

qui ne nécessitera pas de données locales supplémentaires.

10voto

user1219736 Points 31

Si vous utilisez un Mac OSX et SSH, cela peut être dû à un LC_CTYPE incorrect.

$ 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éclenchement de la mauvaise variable.

$ unset LC_CTYPE 

Vérifiez si la locale fonctionne bien.

$ 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, mongo devrait aussi faire l'affaire.

10voto

Sebastien Lorber Points 9682

Pour rendre la correction permanente, vous pouvez modifier l'un de ces fichiers :

  • sudo vim /etc/default/locale
  • sudo vim /etc/environment

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X