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

102

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_base --drop db_dump_path

Il a échoué et il a signalé:

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

J'ai déjà accompli 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?

Luca Anceschi
la source

Réponses:

256

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. donc la commande suivante l'a corrigé:

export LC_ALL="en_US.UTF-8"

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

keisar
la source
3
Cela fonctionne bien dans une session de terminal, mais si vous recherchez une solution permanente, vous préférez vérifier stackoverflow.com/a/32762296/82609
Sebastien Lorber
5
Merci @SebastienLorber, dans mon cas, j'ai ajouté cette ligne à mon ~ / .profile ou ~ / .bashrc et cela a fonctionné en permanence
keisar
Hmmm, je
suis
Merde, mais ce paramètre LC_ALL a résolu le problème directement et là, instantanément et sans nécessiter de privilèges root. Tant pis, j'espère qu'il n'y aura plus de punaises des ténèbres qui me hanteront plus tard.
dzuremar
52

En fait, ce n'est pas strictement lié à MongoDB. D'une manière ou d'une autre, 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 généreront et configureront les paramètres régionaux nécessaires. Après ces étapes, Mongorestore a recommencé à travailler comme d'habitude.

Luca Anceschi
la source
2
cela m'a essentiellement aidé. mais a également dû modifier /etc/locale.genet activer les paramètres régionaux nécessaires (sur arch linux)
Marian Theisen
Cela a résolu le problème pour moi aussi. C'est sur Lubuntu 12.04 x86.
Amos Shapira
1
Mais pourquoi cela se produit-il, y a-t-il des raisons spécifiques pour lesquelles mongodump / restore dépend des langues locales?
Beast
@MarianTheisen C'était aussi le coupable pour moi, je suis sur une nouvelle installation d'Arch et j'ai eu l'erreur en essayant d'exécuter rescuetime. La réparation /etc/locale.genet l'exécution locale-genétaient tout ce qui était nécessaire.
erb
17

L'exportation LC_ALL="en_US.UTF-8"ne fonctionne que si les en_USparamètres régionaux sont installés. Si vous souhaitez éviter d'installer le localespaquet (ou son équivalent sur des distributions autres que les dérivés Debian), vous pouvez utiliser à la place:

export LC_ALL=C.UTF-8

qui ne nécessitera aucune donnée locale supplémentaire.

Josch
la source
10

Si vous utilisez un Mac OSX et SSH, cela peut être émis par 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ésactivez 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, mongo devrait aussi bien faire.

Alex
la source
Fonctionne comme un charme. Très natif et rapide.
Hoang Le
@ user1219736 Vous avez sauvé ma journée: P
KayV
10

Pour rendre le correctif permanent, vous pouvez modifier l'un de ces fichiers:

  • sudo vim / etc / default / locale
  • sudo vim / etc / environnement

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

Sébastien Lorber
la source
cela a fonctionné pour moi (centos, AWS c4.8xlarge, aidé avec le correctif de démarrage de vivado)
Sergiu
9

J'ai eu le même problème sur Debian 7 sans locale-gen (commande introuvable) 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 démarrer.

La source

Daniele Vrut
la source