MongoDB mongorestore failure: locale :: facet :: _ S_create_c_locale name no válido


102

Creé un volcado con mongodump en la computadora A (servidor ubuntu 12.04). Lo moví a la computadora B (servidor ubuntu 12.04) y escribí:

mongorestore -db nombre_bd --drop db_dump_path

Falló e informó:

conectado a: 127.0.0.1
termina llamada después de lanzar una instancia de 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale name not valid
Aborted

He realizado con éxito esta operación antes y este comportamiento extraño nunca ha ocurrido. ¿Qué debo hacer para solucionar este problema?

Respuestas:


256

En mi distribución, "locale-gen" no estaba instalado y resultó que todo lo que tenía que hacer era configurar la variable de entorno LC_ALL. así que el siguiente comando lo solucionó:

export LC_ALL="en_US.UTF-8"

con suerte ayudará a alguien más ...


3
Esto funciona bien en una sesión de terminal, pero si busca una solución permanente, preferiría consultar stackoverflow.com/a/32762296/82609
— Sebastien Lorber

5
Gracias @SebastienLorber, en mi caso agregué esta línea a mi ~ / .profile o ~ / .bashrc y funcionó permanentemente
— keisar

Hmmm, vine aquí justo antes de leer que se desaconseja encarecidamente configurar LC_ALL: wiki.debian.org/Locale
— dzuremar

Maldita sea, pero esta configuración LC_ALL resolvió el problema allí mismo, instantáneamente y sin requerir privilegios de root. No importa, con suerte no habrá ningún bicho de la oscuridad acechándome más tarde.
— dzuremar

52

En realidad, no está estrictamente relacionado con MongoDB. De alguna manera, el idioma en la computadora B no se definió correctamente. Me las arreglé para solucionarlo escribiendo:

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

Estos comandos generarán y configurarán las configuraciones regionales necesarias. Después de esos pasos, mongorestore volvió a funcionar como de costumbre.


2
esto básicamente me ayudó. pero también tuve que editar /etc/locale.geny habilitar las configuraciones regionales necesarias (en arch linux)
— Marian Theisen

Esto también me solucionó el problema. Esto es en Lubuntu 12.04 x86.
— Amos Shapira

1
Pero, ¿por qué sucede esto? ¿Hay alguna razón específica por la que mongodump / restore dependa de los idiomas locales?
— Bestia

@MarianTheisen Ese también fue el culpable para mí, estoy en una nueva instalación de Arch y obtuve el error al intentar ejecutar el tiempo de rescate. Arreglar /etc/locale.geny ejecutar locale-genera todo lo que se necesitaba.
— erb

17

La exportación LC_ALL="en_US.UTF-8"solo funciona si tiene la en_USconfiguración regional instalada. Si desea evitar la instalación del localespaquete (o su equivalente en distribuciones distintas de las derivadas de Debian), puede utilizar en su lugar:

export LC_ALL=C.UTF-8

que no requerirá ningún dato local adicional.


10

Si utiliza Mac OSX y SSH, es posible que este LC_CTYPE sea incorrecto.

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

Desarmar la var incorrecta.

$ unset LC_CTYPE 

Compruebe si la configuración regional funciona bien.

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

Ahora mongo también debería funcionar bien.


Funciona de maravilla. Muy nativo y rápido.
— Hoang Le

@ user1219736 Me salvaste el día: P
— KayV

10

Para que la corrección sea permanente, puede editar uno de esos archivos:

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

Y agrega la línea LC_ALL="en_US.UTF-8"


esto funcionó para mí (centos, AWS c4.8xlarge, ayudó con la solución de inicio de vivado)
— Sergiu

9

Tengo el mismo problema en Debian 7 sin locale-gen (comando no encontrado) instalado.

Resolví de esta manera:

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

Ahora mongodb debería comenzar.

Fuente

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.