Помилка MongoDB mongorestore: locale :: facet :: _ S_create_c_locale ім'я недійсне


102

Я створив дамп із mongodump на комп'ютері A (сервер ubuntu 12.04). Я перемістив його на комп'ютер B (сервер ubuntu 12.04) і набрав:

mongorestore -db db_name --drop db_dump_path

Не вдалося, і він повідомив:

підключено до: 127.0.0.1
завершується виклик після викидання екземпляра 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale ім'я недійсне
Aborted

Я успішно робив цю операцію раніше, і такої дивної поведінки ніколи не виникало. Що мені потрібно зробити, щоб це виправити?

Відповіді:


256

На моєму дистрибутиві "locale-gen" не було встановлено, і виявилося, що все, що мені потрібно було зробити, це встановити змінну середовища LC_ALL. тому наступна команда виправила його:

export LC_ALL="en_US.UTF-8"

сподіваємось, це допоможе комусь іншому ...


3
Це прекрасно працює в термінальному сеансі, але якщо ви шукаєте постійного рішення, краще перевірте stackoverflow.com/a/32762296/82609
Sebastien Lorber

5
Дякую @SebastienLorber, у моєму випадку я додав цей рядок до мого ~ / .profile або ~ / .bashrc, і він працював постійно
keisar

Хммм, прийшов сюди безпосередньо перед тим, як прочитати, що налаштування LC_ALL сильно не рекомендується: wiki.debian.org/Locale
dzuremar

Блін, але ця настройка LC_ALL вирішила проблему прямо тут і там, миттєво і не вимагаючи привілеїв root. Не майте на увазі, сподіваюся, пізніше не буде жодних помилок темряви, які переслідують мене.
dzuremar

52

Насправді це не суворо пов’язано з MongoDB. Якось мова на комп’ютері B була визначена неправильно. Мені вдалося виправити це, ввівши:

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-переналаштування локалів

Ці команди будуть генерувати та конфігурувати необхідні локалі. Після цих кроків монгоресторе повернувся до роботи, як завжди.


2
це в принципі мені допомогло. але також довелося відредагувати /etc/locale.genта ввімкнути потрібні локалі (на арці linux)
Marian Theisen

Це і вирішило проблему для мене. Це на Lubuntu 12.04 x86.
Амос Шапіра

1
Але чому це відбувається, чи є якісь конкретні причини того, що mongodump / відновлення залежить від мов мови?
Звір

@MarianTheisen Це був також винуватець і для мене, я перебуваю на свіжому встановленні Arch і отримав помилку під час спроби запустити ремонт. Виправлення /etc/locale.genта запуск - locale-genце все, що потрібно.
erb

17

Експорт LC_ALL="en_US.UTF-8"працює лише в тому випадку, якщо у вас встановлений en_USлокал. Якщо ви хочете уникати встановлення localesпакета (або його еквівалента на дистрибутивах, крім похідних Debian), то замість цього ви можете використовувати:

export LC_ALL=C.UTF-8

що не потребуватиме додаткових даних про локаль.


10

Якщо ви використовуєте Mac OSX і SSH, це може бути видано неправильним LC_CTYPE.

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

Скасуйте неправильний var.

$ unset LC_CTYPE 

Перевірте, чи працює локал нормально.

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

Тепер монго теж повинен робити добре.


Працює як шарм. Дуже рідний і швидкий.
Hoang Le

@ user1219736 Ви врятували мій день: P
KayV

10

Щоб виправлення стало постійним, ви можете відредагувати один із цих файлів:

  • sudo vim / etc / default / locale
  • sudo vim / тощо / оточення

І додайте рядок LC_ALL="en_US.UTF-8"


це спрацювало для мене (центос, AWS c4.8xlarge, допомогло з виправленням vivado)
Sergiu

9

Отримала таку ж проблему на debian 7 без встановленого locale gen (команда не знайдена).

Я вирішив так:

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

Тепер mongodb має початися.

Джерело

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.