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.