MongoDB mongorestore bị lỗi: locale :: facet :: _ Tên S_create_c_locale không hợp lệ


102

Tôi đã tạo một kết xuất với mongodump trên máy tính A (máy chủ ubuntu 12.04). Tôi đã chuyển nó sang máy tính B (máy chủ ubuntu 12.04) và gõ:

mongorestore -db db_name --drop db_dump_path

Nó không thành công và nó báo cáo:

kết nối với: 127.0.0.1
kết thúc được gọi sau khi ném một phiên bản của 'std :: runtime_error'
what (): locale :: facet :: _ S_create_c_locale tên không hợp lệ
Đã bị hủy bỏ

Tôi đã thực hiện thành công thao tác này trước đây và hành vi kỳ lạ này chưa bao giờ xảy ra. Tôi cần làm gì để sửa lỗi này?

Câu trả lời:


256

Trên bản phân phối của tôi "locale-gen" không được cài đặt và hóa ra tất cả những gì tôi phải làm là đặt biến môi trường LC_ALL. vì vậy lệnh sau đã sửa nó:

export LC_ALL="en_US.UTF-8"

hy vọng nó sẽ giúp ích cho người khác ...


3
Này làm việc tốt trong một phiên bị đầu cuối, nhưng nếu bạn tìm kiếm một giải pháp lâu dài bạn thà kiểm tra stackoverflow.com/a/32762296/82609
Sebastien Lorber

5
Cảm ơn @SebastienLorber, trong trường hợp của tôi, tôi đã thêm dòng này vào ~ / .profile hoặc ~ / .bashrc của mình và nó hoạt động vĩnh viễn
keisar 24/09/15

Hmmm, đến đây ngay trước khi đọc rằng thiết lập LC_ALL không được khuyến khích mạnh mẽ: wiki.debian.org/Locale
dzuremar

Chết tiệt, nhưng cài đặt LC_ALL này đã giải quyết vấn đề ngay lập tức và ở đó, ngay lập tức và không yêu cầu đặc quyền root. Đừng bận tâm, hy vọng sau này sẽ không có con bọ bóng tối nào ám ảnh tôi nữa.
dzuremar

52

Trên thực tế, nó không hoàn toàn liên quan đến MongoDB. Bằng cách nào đó, ngôn ngữ trên máy tính B không được định nghĩa chính xác. Tôi đã sửa được nó bằng cách gõ:

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-cấu hình lại ngôn ngữ

Các lệnh này sẽ tạo và cấu hình các ngôn ngữ cần thiết. Sau các bước đó, mongorestore đã hoạt động trở lại như bình thường.


2
điều này về cơ bản đã giúp tôi. mà còn phải chỉnh sửa /etc/locale.genvà kích hoạt các ngôn ngữ cần thiết (trên Arch linux)
Marian Theisen

Điều này cũng giải quyết vấn đề cho tôi. Đây là trên Lubuntu 12.04 x86.
Amos Shapira

1
Nhưng tại sao điều này lại xảy ra, có bất kỳ lý do cụ thể nào khiến mongodump / restore phụ thuộc vào ngôn ngữ địa phương không?
Beast

@MarianTheisen Đó cũng là thủ phạm đối với tôi, tôi đang cài đặt Arch mới và gặp lỗi khi cố gắng chạy thời gian giải cứu. Sửa chữa /etc/locale.genvà chạy locale-genlà tất cả những gì được yêu cầu.
erb

17

Xuất LC_ALL="en_US.UTF-8"chỉ hoạt động nếu bạn đã en_UScài đặt ngôn ngữ. Nếu bạn muốn tránh cài đặtlocales gói (hoặc gói tương đương trên các bản phân phối không phải là dẫn xuất Debian), thì bạn có thể sử dụng:

export LC_ALL=C.UTF-8

mà sẽ không yêu cầu bất kỳ dữ liệu ngôn ngữ bổ sung nào.


10

Nếu bạn đang sử dụng Mac OSX và SSH, điều này có thể được cấp bởi LC_CTYPE sai.

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

Bỏ đặt var sai.

$ unset LC_CTYPE 

Kiểm tra xem ngôn ngữ có hoạt động tốt không.

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

Bây giờ mongo cũng nên làm tốt.


Hoạt động như một sự quyến rũ. Rất bản địa và nhanh chóng.
Hoàng Lê

@ user1219736 Bạn đã cứu một ngày của tôi: P
KayV 21/12/16

10

Để sửa lỗi vĩnh viễn, bạn có thể chỉnh sửa một trong các tệp đó:

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

Và thêm dòng LC_ALL="en_US.UTF-8"


điều này đã làm việc cho tôi (centos, AWS c4.8xlarge, đã giúp sửa lỗi vivado bắt đầu)
Sergiu

9

Gặp sự cố tương tự trên debian 7 mà không cài đặt locale-gen (không tìm thấy lệnh).

Tôi đã giải quyết theo cách này:

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

Bây giờ mongodb sẽ bắt đầu.

Nguồn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.