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?

Luca Anceschi
quelle

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 ...

Keisar
quelle
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.

Luca Anceschi
quelle
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.

josch
quelle
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.

Alex
quelle
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"

Sebastien Lorber
quelle
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

Daniele Vrut
quelle