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?

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


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.


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.


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.


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"


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.