Błąd MongoDB mongorestore: locale :: facet :: _ S_create_c_locale nazwa nieprawidłowa

102

Utworzyłem zrzut za pomocą mongodump na komputerze A (serwer Ubuntu 12.04). Przeniosłem go na komputer B (serwer ubuntu 12.04) i wpisałem:

mongorestore -db nazwa_db --drop ścieżka_dumpu_db

Nie udało się i zgłosił:

connected to: 127.0.0.1
terminate wywołana po rzuceniu instancji 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale nazwa niepoprawna
Przerwano

Udało mi się już wykonać tę operację i to dziwne zachowanie nigdy nie wystąpiło. Co muszę zrobić, aby to naprawić?

Luca Anceschi
źródło

Odpowiedzi:

256

Na mojej dystrybucji "locale-gen" nie został zainstalowany i okazało się, że wszystko co musiałem zrobić to ustawić zmienną środowiskową LC_ALL. więc następujące polecenie naprawiło to:

export LC_ALL="en_US.UTF-8"

mam nadzieję, że pomoże to komuś innemu ...

keisar
źródło
3
Działa to dobrze w sesji terminalowej, ale jeśli szukasz trwałego rozwiązania, wolisz sprawdzić stackoverflow.com/a/32762296/82609
Sebastien Lorber
5
Dzięki @SebastienLorber, w moim przypadku dodałem tę linię do mojego ~ / .profile lub ~ / .bashrc i działało trwale
keisar
Hmmm, przyszedłem tutaj tuż przed przeczytaniem, że ustawienie LC_ALL jest zdecydowanie odradzane: wiki.debian.org/Locale
dzuremar
Cholera, ale to ustawienie LC_ALL rozwiązało problem od razu i tam, natychmiast i bez konieczności posiadania uprawnień roota. Nieważne, mam nadzieję, że później nie będą mnie nawiedzały żadne błędy ciemności.
dzuremar
52

W rzeczywistości nie jest ściśle powiązany z MongoDB. W jakiś sposób język na komputerze B nie został poprawnie zdefiniowany. Udało mi się to naprawić wpisując:

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

Te polecenia wygenerują i skonfigurują wymagane ustawienia regionalne. Po tych krokach mongorestore wrócił do normalnej pracy.

Luca Anceschi
źródło
2
to w zasadzie pomogło mi. ale także musiałem edytować /etc/locale.geni włączać potrzebne lokalizacje (na arch linux)
Marian Theisen
To również rozwiązało problem. To jest na Lubuntu 12.04 x86.
Amos Shapira
1
Ale dlaczego tak się dzieje, czy są jakieś szczególne powody, dla których mongodump / restore zależy od języków lokalnych?
Bestia,
@MarianTheisen To był również winowajca dla mnie, jestem na nowej instalacji Arch i otrzymałem błąd podczas próby uruchomienia rescuetime. Wystarczyło naprawić /etc/locale.geni uruchomić locale-gen.
erb
17

Eksportowanie LC_ALL="en_US.UTF-8"działa tylko wtedy, gdy masz en_USzainstalowane ustawienia regionalne. Jeśli chcesz uniknąć instalowania localespakietu (lub jego odpowiednika w dystrybucjach innych niż pochodne Debiana), możesz zamiast tego użyć:

export LC_ALL=C.UTF-8

które nie będą wymagały żadnych dodatkowych danych lokalnych.

josch
źródło
10

Jeśli używasz Mac OSX i SSH, może to być spowodowane niewłaściwym LC_CTYPE.

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

Usuń niewłaściwe var.

$ unset LC_CTYPE 

Sprawdź, czy lokalizacja działa poprawnie.

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

Teraz mongo też powinno wystarczyć.

Alex
źródło
Działa jak marzenie. Bardzo natywny i szybki.
Hoang Le
@ user1219736 Uratowałeś mój dzień: P
KayV
10

Aby naprawić błąd, możesz edytować jeden z tych plików:

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

I dodaj linię LC_ALL="en_US.UTF-8"

Sebastien Lorber
źródło
to zadziałało dla mnie (centos, AWS c4.8xlarge, pomogło w poprawce startowej Vivado)
Sergiu
9

Mam ten sam problem na Debianie 7 bez zainstalowanego locale-gen (polecenie nie zostało znalezione).

Rozwiązałem w ten sposób:

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

Teraz mongodb powinien się rozpocząć.

Źródło

Daniele Vrut
źródło