MongoDB mongorestore hatası: locale :: facet :: _ S_create_c_locale adı geçerli değil


102

A bilgisayarında mongodump ile bir döküm oluşturdum (ubuntu 12.04 sunucusu). B bilgisayarına (ubuntu 12.04 sunucusu) taşıdım ve yazdım:

mongorestore -db db_name --drop db_dump_path

Başarısız oldu ve şunu bildirdi:

bağlı: 127.0.0.1
'std :: runtime_error' örneğini atma sonra denen olarak fesih
Ne (): yerel :: faset :: _ S_create_c_locale adı geçerli değil
Kesildi

Bu işlemi daha önce başarıyla gerçekleştirdim ve bu garip davranış hiç gerçekleşmedi. Bunu düzeltmek için ne yapmam gerekiyor?

Yanıtlar:


256

Dağıtımımda "locale-gen" kurulu değildi ve tek yapmam gereken LC_ALL ortam değişkenini ayarlamak olduğu ortaya çıktı. bu yüzden aşağıdaki komut sorunu çözdü:

export LC_ALL="en_US.UTF-8"

umarım başka birine yardımcı olur ...


3
Bu, bir terminal oturumunda iyi çalışıyor, ancak kalıcı bir çözüm arıyorsanız stackoverflow.com/a/32762296/82609
— Sebastien Lorber

5
Teşekkürler @SebastienLorber, benim durumumda bu satırı ~ / .profile veya ~ / .bashrc
— dosyama ekledim

Hmmm, LC_ALL ayarının kesinlikle tavsiye edilmediğini
— dzuremar

Lanet olsun, ancak bu LC_ALL ayarı, sorunu anında ve kök ayrıcalıkları gerektirmeden hemen ve orada çözdü. Boşver, umarım daha sonra beni rahatsız eden karanlık böcek olmaz.
— dzuremar

52

Aslında MongoDB ile tam bir ilgisi yok. Bir şekilde B bilgisayarındaki dil doğru tanımlanmamıştı. Yazarak düzeltmeyi başardım:

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

Bu komutlar, gerekli yerel ayarları oluşturacak ve yapılandıracaktır. Bu adımlardan sonra mongorestore her zamanki gibi çalışmaya başladı.


2
bu temelde bana yardımcı oldu. aynı zamanda /etc/locale.gengerekli yerel ayarları (arch linux üzerinde) düzenlemek ve etkinleştirmek zorundaydı
— Marian Theisen

Bu benim için de sorunu çözdü. Bu Lubuntu 12.04 x86'da.
— Amos Shapira

1
Ama bu neden oluyor, mongodump / restore'nin yerel dillere bağlı olmasının belirli nedenleri var mı?
— Beast

@MarianTheisen Bu benim için de suçluydu, yeni bir Arch kurulumundayım ve kurtarma süresini çalıştırmaya çalışırken hatayı aldım. Tamir etmek /etc/locale.genve çalıştırmak locale-gengerekli olan tek şeydi.
— erb

17

Dışa aktarma LC_ALL="en_US.UTF-8"yalnızca en_USyerel ayarı yüklediyseniz çalışır. localesPaketi (veya eşdeğerini Debian türevleri dışındaki dağıtımlarda) kurmaktan kaçınmak istiyorsanız, bunun yerine şunu kullanabilirsiniz:

export LC_ALL=C.UTF-8

ekstra yerel veri gerektirmez.


10

Mac OSX ve SSH kullanıyorsanız, bu yanlış LC_CTYPE tarafından verilebilir.

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

Yanlış var.

$ unset LC_CTYPE 

Yerel ayarın iyi çalışıp çalışmadığını kontrol edin.

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

Şimdi mongo da iyi yapmalı.


Tıkır tıkır çalışıyor. Çok yerli ve hızlı.
— Hoang Le

@ user1219736 Günümü kurtardın: P
— KayV

10

Düzeltmeyi kalıcı hale getirmek için bu dosyalardan birini düzenleyebilirsiniz:

  • sudo vim / etc / varsayılan / locale
  • sudo vim / etc / çevre

Ve çizgiyi ekle LC_ALL="en_US.UTF-8"


bu benim için çalıştı (centos, AWS c4.8xlarge, vivado başlangıç ​​düzeltmesine yardımcı oldu)
— Sergiu

9

Locale-gen (komut bulunamadı) kurulu olmadan debian 7'de aynı sorunu yaşadım.

Bu şekilde çözdüm:

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

Şimdi mongodb başlamalı.

Kaynak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.