MongoDB mongorestore kegagalan: locale :: facet :: _ Nama S_create_c_locale tidak valid


102

Saya membuat dump dengan mongodump di komputer A (server ubuntu 12.04). Saya memindahkannya ke komputer B (server ubuntu 12.04) dan mengetik:

mongorestore -db db_name --drop db_dump_path

Itu gagal dan dilaporkan:

terhubung ke: 127.0.0.1
terminate dipanggil setelah melempar turunan dari 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale name not valid
Dibatalkan

Saya telah berhasil menyelesaikan operasi ini sebelumnya dan perilaku aneh ini tidak pernah terjadi. Apa yang harus saya lakukan untuk memperbaikinya?

Jawaban:


256

Pada distro saya "locale-gen" belum terinstal dan ternyata yang harus saya lakukan hanyalah mengatur environment variable LC_ALL. jadi perintah berikut memperbaikinya:

export LC_ALL="en_US.UTF-8"

semoga bisa membantu orang lain ...


3
Ini berfungsi dengan baik dalam sesi terminal, tetapi jika Anda mencari solusi permanen, Anda lebih suka memeriksa stackoverflow.com/a/32762296/82609
— Sebastien Lorber

5
Terima kasih @SebastienLorber, dalam kasus saya, saya menambahkan baris ini ke ~ / .profile atau ~ / .bashrc saya dan berfungsi secara permanen
— keisar

Hmmm, datang ke sini sebelum membaca bahwa pengaturan LC_ALL sangat tidak disarankan: wiki.debian.org/Locale
— dzuremar

Sial, tetapi pengaturan LC_ALL ini memecahkan masalah saat itu juga, secara instan dan tanpa memerlukan hak akses root. Lupakan, semoga tidak akan ada serangga kegelapan yang menghantuiku nanti.
— dzuremar

52

Sebenarnya itu tidak terkait erat dengan MongoDB. Entah bagaimana bahasa di komputer B tidak didefinisikan dengan benar. Saya berhasil memperbaikinya dengan mengetik:

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-konfigurasi ulang lokal

Perintah ini akan menghasilkan dan mengkonfigurasi lokal yang dibutuhkan. Setelah langkah-langkah tersebut, mongorestore kembali bekerja seperti biasa.


2
ini pada dasarnya membantu saya. tetapi juga harus mengedit /etc/locale.gendan mengaktifkan lokal yang diperlukan (di arch linux)
— Marian Theisen

Ini juga memecahkan masalah saya. Ini ada di Lubuntu 12.04 x86.
— Amos Shapira

1
Tetapi mengapa ini terjadi, apakah ada alasan khusus mengapa mongodump / restore bergantung pada bahasa lokal?
— Beast

@MarianTheisen Itu juga penyebabnya bagi saya, saya sedang menginstal Arch baru dan mendapatkan kesalahan saat mencoba menjalankan rescuetime. Memperbaiki /etc/locale.gendan menjalankan locale-genadalah semua yang diperlukan.
— erb

17

Mengekspor LC_ALL="en_US.UTF-8"hanya berfungsi jika Anda en_USmenginstal lokal. Jika Anda ingin menghindari menginstal localespaket (atau yang setara pada distribusi selain turunan Debian), Anda dapat menggunakan:

export LC_ALL=C.UTF-8

yang tidak memerlukan data lokal tambahan.


10

Jika Anda menggunakan Mac OSX dan SSH, ini mungkin dikeluarkan oleh LC_CTYPE yang salah.

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

Hapus var yang salah.

$ unset LC_CTYPE 

Periksa apakah lokal berfungsi dengan baik.

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

Sekarang mongo juga harus melakukannya dengan baik.


Bekerja seperti pesona. Sangat asli dan cepat.
— Hoang Le

@ pengguna1219736 Anda menyelamatkan hari saya: P
— KayV

10

Untuk membuat perbaikan permanen, Anda dapat mengedit salah satu file tersebut:

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

Dan tambahkan garis LC_ALL="en_US.UTF-8"


ini berhasil untuk saya (centos, AWS c4.8xlarge, membantu dengan perbaikan awal vivado)
— Sergiu

9

Punya masalah yang sama pada debian 7 tanpa locale-gen (perintah tidak ditemukan) diinstal.

Saya menyelesaikannya dengan cara ini:

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

Sekarang mongodb harus dimulai.

Sumber

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.