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?

Luca Anceschi
sumber

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

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

Luca Anceschi
sumber
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.

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

Alex
sumber
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"

Sebastien Lorber
sumber
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

Daniele Vrut
sumber