it-swarm.com.de

MongoDB mongorestore-Fehler: locale :: facet :: _ S_create_c_locale-Name ungültig

Ich habe mit mongodump auf Computer A (Ubuntu 12.04 Server) einen Dump 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 hat 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?

101
Luca Anceschi

Eigentlich ist es nicht eng mit MongoDB verwandt. Irgendwie wurde die Sprache auf Computer B nicht richtig definiert. Ich konnte das Problem beheben, indem ich Folgendes eintippte:

Sudo locale-gen de_DE de_DE.UTF-8
Sudo locale-gen it_IT it_IT.UTF-8
Sudo locale-gen xx_xx xx_XX.UTF-8 ...
Sudo dpkg-Gebietsschemas neu konfigurieren

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

51
Luca Anceschi

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

export LC_ALL="en_US.UTF-8"

hoffentlich hilft es jemand anderem ...

254
keisar

Das Exportieren von LC_ALL="en_US.UTF-8" Funktioniert nur, wenn Sie das Gebietsschema en_US Installiert haben. Wenn Sie die Installation des Pakets locales (oder seines Äquivalents auf anderen Distributionen als Debian-Derivaten) vermeiden möchten, können Sie stattdessen Folgendes verwenden:

export LC_ALL=C.UTF-8

hierfür sind keine zusätzlichen Gebietsschemadaten erforderlich.

15
josch

Wenn Sie einen Mac OSX und SSH verwenden, wird dies möglicherweise von einem falschen 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=

Lösche 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=

Nun sollte es auch dem Mongo gut gehen.

10
user1219736

Um den Fix dauerhaft zu machen, können Sie eine dieser Dateien bearbeiten:

  • Sudo vim/etc/default/locale
  • Sudo vim/etc/environment

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

10

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

Ich habe diesen Weg gelöst:

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

Jetzt sollte Mongodb anfangen.

Quelle

9