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

102

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

mongorestore -db имя_бд --drop db_dump_path

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

connected to: 127.0.0.1
terminate, вызываемый после выброса экземпляра 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale name not valid
Aborted

Я успешно выполнял эту операцию раньше, и такого странного поведения никогда не было. Что мне нужно сделать, чтобы это исправить?

Лука Анчески
источник

Ответы:

256

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

export LC_ALL="en_US.UTF-8"

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

Кейсар
источник
3
Это отлично работает в терминальном сеансе, но если вы ищете постоянное решение, вам лучше проверить stackoverflow.com/a/32762296/82609
Себастьян Лорбер,
5
Спасибо @SebastienLorber, в моем случае я добавил эту строку в свой ~ / .profile или ~ / .bashrc, и она работала постоянно
keisar
Хммм, зашел сюда как раз перед прочтением, что установка LC_ALL категорически не рекомендуется: wiki.debian.org/Locale
dzuremar 07
Блин, но эта настройка LC_ALL тут же решила проблему, мгновенно и без прав root. Неважно, надеюсь, меня больше не будут преследовать мрачные насекомые.
dzuremar 07
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-reconfigure locales

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

Лука Анчески
источник
2
это в основном помогло мне. но также пришлось отредактировать /etc/locale.genи включить необходимые локали (в Arch Linux)
Мариан Тейсен
Это тоже решило проблему для меня. Это на Lubuntu 12.04 x86.
Амос Шапира
1
Но почему это происходит, есть ли какие-то конкретные причины, по которым mongodump / restore зависит от языков локали?
Beast
@MarianTheisen Это тоже было виноватым для меня, я установил новую версию Arch и получил ошибку при попытке запустить rescuetime. Все, что требовалось - починить /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=

Отключите неправильную переменную.

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

Теперь у монго тоже все должно быть хорошо.

Alex
источник
Работает как шарм. Очень родной и шустрый.
Хоанг Ле
@ user1219736 Ты спас мне день: P
KayV
10

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

  • sudo vim / и т. д. / по умолчанию / локаль
  • sudo vim / и т.д. / окружающая среда

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

Себастьян Лорбер
источник
это сработало для меня (centos, AWS c4.8xlarge, помог с исправлением запуска vivado)
Серджиу
9

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

Я решил так:

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

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

Источник

Даниэле Врут
источник