Errore MongoDB mongorestore: locale :: facet :: _ S_create_c_locale nome non valido


102

Ho creato un dump con mongodump sul computer A (server ubuntu 12.04). L'ho spostato sul computer B (server Ubuntu 12.04) e ho digitato:

mongorestore -db db_name --drop db_dump_path

Non è riuscito e ha riportato:

connesso a: 127.0.0.1
terminate chiamato dopo aver lanciato un'istanza di 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale name not valid
Aborted

Ho già eseguito con successo questa operazione e questo strano comportamento non si è mai verificato. Cosa devo fare per risolvere questo problema?

Risposte:


256

Sulla mia distribuzione "locale-gen" non era installato e si è scoperto che tutto quello che dovevo fare era impostare la variabile d'ambiente LC_ALL. quindi il seguente comando lo ha risolto:

export LC_ALL="en_US.UTF-8"

si spera che possa aiutare qualcun altro ...


3
Funziona bene in una sessione terminale, ma se cerchi una soluzione permanente, preferisci controllare stackoverflow.com/a/32762296/82609
Sebastien Lorber,

5
Grazie @SebastienLorber, nel mio caso ho aggiunto questa riga al mio ~ / .profile o ~ / .bashrc e ha funzionato in modo permanente
keisar

Hmmm, sono venuto qui appena prima di leggere che l'impostazione LC_ALL è fortemente sconsigliata: wiki.debian.org/Locale
dzuremar

Dannazione, ma questa impostazione LC_ALL ha risolto il problema immediatamente, istantaneamente e senza richiedere i privilegi di root. Non importa, spero che non ci saranno insetti dell'oscurità che mi perseguiteranno più tardi.
dzuremar

52

In realtà non è strettamente correlato a MongoDB. In qualche modo la lingua sul computer B non è stata definita correttamente. Sono riuscito a risolverlo digitando:

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

Questi comandi genereranno e configureranno le impostazioni locali necessarie. Dopo questi passaggi, mongorestore è tornato a lavorare come al solito.


2
questo fondamentalmente mi ha aiutato. ma ha anche dovuto modificare /etc/locale.gene abilitare le impostazioni locali necessarie (su arch linux)
Marian Theisen

Questo ha risolto il problema anche per me. Questo è su Lubuntu 12.04 x86.
Amos Shapira

1
Ma perché sta succedendo, ci sono ragioni specifiche per cui mongodump / restore dipende dalle lingue locali?
Beast

@MarianTheisen Questo è stato anche il colpevole per me, sono su una nuova installazione di Arch e ho ricevuto l'errore durante il tentativo di eseguire rescuetime. Riparare /etc/locale.gene correre locale-genera tutto ciò che era necessario.
erb

17

L'esportazione LC_ALL="en_US.UTF-8"funziona solo se hai installato la en_USlocale. Se vuoi evitare di installare il localespacchetto (o il suo equivalente su distribuzioni diverse dalle derivate Debian), puoi invece usare:

export LC_ALL=C.UTF-8

che non richiederà dati locali aggiuntivi.


10

Se utilizzi un Mac OSX e SSH, questo potrebbe essere emesso da LC_CTYPE errato.

$ 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=

Annulla l'impostazione della var errata.

$ unset LC_CTYPE 

Controlla se la localizzazione funziona correttamente.

$ 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=

Ora anche il mongo dovrebbe andare bene.


Funziona come un fascino. Molto nativo e veloce.
Hoang Le

@ user1219736 Mi hai salvato la giornata: P
KayV

10

Per rendere permanente la correzione è possibile modificare uno di questi file:

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

E aggiungi la linea LC_ALL="en_US.UTF-8"


questo ha funzionato per me (centos, AWS c4.8xlarge, ha aiutato con la correzione dell'avvio di vivado)
Sergiu

9

Ho lo stesso problema su Debian 7 senza locale-gen (comando non trovato) installato.

Ho risolto in questo modo:

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

Ora dovrebbe iniziare mongodb.

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.