MongoDB-Mongorestore-Fehler: locale :: facet :: _ S_create_c_locale name ungültig


102

Ich habe einen Dump mit mongodump auf Computer A (Ubuntu 12.04 Server) erstellt. Ich habe es auf Computer B (Ubuntu 12.04 Server) verschoben und Folgendes eingegeben:

mongorestore -db db_name --drop db_dump_path

Es ist fehlgeschlagen und es wurde berichtet:

verbunden mit: 127.0.0.1
terminate wird aufgerufen, nachdem eine Instanz von 'std :: runtime_error' ausgelöst wurde
what (): locale :: facet :: _ S_create_c_locale name ungültig
Abgebrochen

Ich habe diese Operation bereits erfolgreich durchgeführt und dieses seltsame Verhalten ist noch nie aufgetreten. Was muss ich tun, um dies zu beheben?

Antworten:


256

In meiner Distribution wurde "locale-gen" nicht installiert und es stellte sich heraus, dass ich nur die Umgebungsvariable LC_ALL setzen musste. Der folgende Befehl hat das Problem behoben:

export LC_ALL="en_US.UTF-8"

hoffentlich hilft es jemand anderem ...


3
Dies funktioniert gut in einer Terminalsitzung, aber wenn Sie nach einer dauerhaften Lösung suchen, überprüfen Sie lieber stackoverflow.com/a/32762296/82609
Sebastien Lorber

5
Danke @SebastienLorber, in meinem Fall habe ich diese Zeile zu meinem ~ / .profile oder ~ / .bashrc hinzugefügt und es hat dauerhaft funktioniert
keisar

Hmmm, kam hier gerade vor , dass Einstellung LC_ALL auf das Lesen wird dringend abgeraten: wiki.debian.org/Locale
dzuremar

Verdammt, aber diese LC_ALL-Einstellung löste das Problem sofort und ohne Root-Rechte. Vergiss nicht, hoffentlich werden mich später keine Dunkelwanzen mehr verfolgen.
Dzuremar

52

Eigentlich ist es nicht eng mit MongoDB verbunden. Irgendwie war die Sprache auf Computer B nicht richtig definiert. Ich habe es geschafft, indem ich Folgendes eingegeben habe:

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-locales neu konfigurieren

Diese Befehle generieren und konfigurieren die erforderlichen Gebietsschemas. Nach diesen Schritten arbeitete mongorestore wieder wie gewohnt.


2
Das hat mir im Grunde geholfen. musste aber auch /etc/locale.gendie benötigten Locales bearbeiten und aktivieren (unter Arch Linux)
Marian Theisen

Dies löste das Problem auch für mich. Dies ist auf Lubuntu 12.04 x86.
Amos Shapira

1
Aber warum passiert das? Gibt es bestimmte Gründe, warum Mongodump / Restore von den Landessprachen abhängt?
Beast

@MarianTheisen Das war auch der Schuldige für mich. Ich bin auf einer neuen Arch-Installation und habe den Fehler beim Versuch, die Rettungszeit auszuführen, erhalten. Das Reparieren /etc/locale.genund Ausführen locale-genwar alles, was erforderlich war.
Erb

17

Der Export LC_ALL="en_US.UTF-8"funktioniert nur, wenn Sie das en_USGebietsschema installiert haben. Wenn Sie vermeiden möchten, das localesPaket (oder dessen Äquivalent auf anderen Distributionen als Debian-Derivaten) zu installieren , können Sie stattdessen Folgendes verwenden:

export LC_ALL=C.UTF-8

Hierfür sind keine zusätzlichen Gebietsschemadaten erforderlich.


10

Wenn Sie Mac OSX und SSH verwenden, wird dies möglicherweise durch falsches LC_CTYPE ausgegeben.

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

Deaktivieren Sie die falsche Var.

$ unset LC_CTYPE 

Überprüfen Sie, ob das Gebietsschema ordnungsgemäß funktioniert.

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

Jetzt sollte Mongo auch gut tun.


Klappt wunderbar. Sehr einheimisch und schnell.
Hoang Le

@ user1219736 Du hast meinen Tag gerettet: P
KayV

10

Um das Update dauerhaft zu machen, können Sie eine dieser Dateien bearbeiten:

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

Und füge die Zeile hinzu LC_ALL="en_US.UTF-8"


Dies funktionierte für mich (Centos, AWS c4.8xlarge, half beim Start von Vivado)
Sergiu

9

Habe das gleiche Problem auf Debian 7 ohne locale-gen (Befehl nicht gefunden) installiert.

Ich habe es so gelöst:

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

Jetzt sollte Mongodb beginnen.

Quelle

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.