MongoDB mongorestore ล้มเหลว: locale :: facet :: _ ชื่อ S_create_c_locale ไม่ถูกต้อง


103

ฉันสร้างดัมพ์ด้วย 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 ชื่อไม่ถูกต้องถูก
ยกเลิก

ฉันเคยทำสำเร็จมาก่อนและพฤติกรรมแปลก ๆ นี้ไม่เคยเกิดขึ้น ฉันต้องทำอย่างไรเพื่อแก้ไขปัญหานี้

คำตอบ:


257

บน distro "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 นี้ช่วยแก้ปัญหาได้ทันทีและไม่ต้องใช้สิทธิ์รูท ไม่เป็นไรหวังว่าจะไม่มีแมลงแห่งความมืดมาหลอกหลอนฉันในภายหลัง
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- กำหนดค่าโลแคลใหม่

คำสั่งเหล่านี้จะสร้างและกำหนดค่าโลแคลที่ต้องการ หลังจากขั้นตอนเหล่านั้น mongorestore กลับมาทำงานได้ตามปกติ


2
สิ่งนี้ช่วยฉันได้โดยทั่วไป แต่ยังต้องแก้ไข/etc/locale.genและเปิดใช้งานตำแหน่งที่ต้องการ (บน arch linux)
Marian Theisen

สิ่งนี้ช่วยแก้ปัญหาให้ฉันด้วย นี่คือบน Lubuntu 12.04 x86
Amos Shapira

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=

ยกเลิกการตั้งค่า 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=

ตอนนี้ mongo ก็ควรจะทำได้ดี


ใช้งานได้เหมือนมีเสน่ห์ พื้นเมืองมากและรวดเร็ว
Hoang Le

@ user1219736 คุณบันทึกวันของฉันไว้: P
KayV

10

ในการแก้ไขถาวรคุณสามารถแก้ไขไฟล์เหล่านี้ได้:

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

และแอดไลน์ LC_ALL="en_US.UTF-8"


สิ่งนี้ใช้ได้ผลสำหรับฉัน (centos, AWS c4.8xlarge, ช่วยด้วย vivado เริ่มต้นแก้ไข)
Sergiu

9

มีปัญหาเดียวกันใน debian 7 ที่ไม่มีการติดตั้ง locale-gen (ไม่พบคำสั่ง)

ฉันแก้ไขด้วยวิธีนี้:

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

ตอนนี้ mongodb ควรเริ่ม

ที่มา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.