Falha do MongoDB mongorestore: locale :: facet :: _ S_create_c_locale nome inválido

102

Criei um dump com o mongodump no computador A (servidor ubuntu 12.04). Mudei para o computador B (servidor ubuntu 12.04) e digitei:

mongorestore -db db_name --drop db_dump_path

Ele falhou e relatou:

conectado a: 127.0.0.1
terminate chamado após lançar uma instância de 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale nome inválido
Abortado

Já realizei com sucesso essa operação antes e esse comportamento estranho nunca ocorreu. O que preciso fazer para consertar isso?

Luca Anceschi
fonte

Respostas:

256

Na minha distro, "locale-gen" não foi instalado e tudo que eu tive que fazer foi definir a variável de ambiente LC_ALL. então o seguinte comando corrigiu:

export LC_ALL="en_US.UTF-8"

espero que ajude outra pessoa ...

keisar
fonte
3
Isso funciona bem em uma sessão de terminal, mas se você procura uma solução permanente, você prefere verificar stackoverflow.com/a/32762296/82609
Sebastien Lorber
5
Obrigado @SebastienLorber, no meu caso adicionei esta linha ao meu ~ / .profile ou ~ / .bashrc e funcionou permanentemente
keisar
Hmmm, vim aqui antes de ler que a configuração LC_ALL é fortemente desencorajada: wiki.debian.org/Locale
dzuremar
Droga, mas esta configuração LC_ALL resolveu o problema ali mesmo, instantaneamente e sem exigir privilégios de root. Esquece, espero que não haja nenhum inseto da escuridão me assombrando mais tarde.
dzuremar
52

Na verdade, ele não está estritamente relacionado ao MongoDB. De alguma forma, o idioma no computador B não foi definido corretamente. Consegui consertar 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

Esses comandos irão gerar e configurar os locais necessários. Depois dessas etapas, o mongorestore voltou a funcionar normalmente.

Luca Anceschi
fonte
2
isso basicamente me ajudou. mas também teve que editar /etc/locale.gene habilitar os locais necessários (no arch linux)
Marian Theisen
Isso também resolveu o problema para mim. Isso está no Lubuntu 12.04 x86.
Amos Shapira
1
Mas por que isso está acontecendo, há algum motivo específico para que mongodump / restore dependa dos idiomas locais?
Besta
@MarianTheisen Esse foi o culpado para mim também, estou em uma nova instalação do Arch e recebi o erro ao tentar executar o tempo de resgate. Consertar /etc/locale.gene executar locale-genera tudo o que era necessário.
erb de
17

A exportação LC_ALL="en_US.UTF-8"só funciona se você tiver o en_USlocale instalado. Se você quiser evitar a instalação do localespacote (ou seu equivalente em distribuições que não sejam derivados do Debian), então você pode usar:

export LC_ALL=C.UTF-8

que não exigirá nenhum dado extra de localidade.

Josch
fonte
10

Se você estiver usando um Mac OSX e SSH, isso pode ser emitido por LC_CTYPE incorreto.

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

Remova o var errado.

$ unset LC_CTYPE 

Verifique se o local está funcionando bem.

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

Agora, mongo também deve servir.

Alex
fonte
Funciona como um encanto. Muito nativo e rápido.
Hoang Le
@ user1219736 Você salvou meu dia: P
KayV
10

Para tornar a correção permanente, você pode editar um desses arquivos:

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

E adicione a linha LC_ALL="en_US.UTF-8"

Sebastien Lorber
fonte
isso funcionou para mim (centos, AWS c4.8xlarge, ajudou com a correção inicial do vivado)
Sergiu
9

Tenho o mesmo problema no debian 7 sem locale-gen (comando não encontrado) instalado.

Eu resolvi assim:

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

Agora o mongodb deve começar.

Fonte

Daniele Vrut
fonte