Ошибка MongoDB в монгоресторе: locale :: facet :: _ S_create_c_locale имя недействительно

96

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

mongorestore -db db_name --drop db_dump_path

Не удалось, и он сообщил:

подключен к: 127.0.0.1
terminate call после вызова экземпляра 'std:: runtime_error'
what(): locale:: facet:: _ S_create_c_locale имя недействительно
Отменено

Я успешно выполнил эту операцию раньше, и это странное поведение никогда не происходило.

Любая помощь оценивается. Спасибо.

Теги:
locale
mongorestore
mongodump
ubuntu-12.04

6 ответов

45
Лучший ответ

Собственно, это не строго связано с MongoDB. Как-то язык на компьютере B не был определен правильно. Мне удалось исправить это, набрав:

sudo locale-gen en_US ru_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

Эти команды будут генерировать и настраивать необходимые локали. После этих шагов mongorestore вернулся, как обычно.

  • 2
    это в основном помогло мне. но также пришлось отредактировать /etc/locale.gen и включить необходимые локали (в /etc/locale.gen Linux)
  • 0
    Это решило проблему и для меня. Это на Lubuntu 12.04 x86.
Показать ещё 2 комментария
223

В моем дистрибутиве "locale-gen" не был установлен, и оказалось, что все, что мне нужно было сделать, это установить переменную среды LC_ALL. поэтому следующая команда зафиксировала это:

export LC_ALL="en_US.UTF-8"

надеюсь, это поможет кому-то еще...

  • 3
    Это отлично работает в терминальной сессии, но если вы ищете постоянное решение, вы бы предпочли проверить stackoverflow.com/a/32762296/82609
  • 5
    Спасибо @SebastienLorber, в моем случае я добавил эту строку в мой ~ / .profile или ~ / .bashrc, и он работал постоянно
Показать ещё 3 комментария
13

Экспорт LC_ALL="en_US.UTF-8" работает только в том случае, если установлен языковой стандарт en_US. Если вы хотите избежать установки пакета locales (или его эквивалента в дистрибутивах, отличных от производных Debian), вы можете вместо этого использовать:

export LC_ALL=C.UTF-8

который не потребует дополнительных данных локали.

  • 1
    идеально, только это работает для меня.
8

Чтобы сделать постоянным исправление, вы можете отредактировать один из этих файлов:

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

И добавьте строку LC_ALL="en_US.UTF-8"

  • 0
    это сработало для меня (centos, AWS c4.8xlarge, помог с исправлением запуска vivado)
8

Если вы используете 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=

Теперь манго тоже должен преуспеть.

  • 0
    Работает как шарм. Очень родной и быстрый.
  • 0
    @ user1219736 Ты спас мой день: P
7

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

Я решил так:

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

Теперь mongodb должен начинаться.

Источник

Ещё вопросы

Сообщество Overcoder
Наверх
Меню