วันนี้ตอน ให้กับรุ่นที่ 12 พบปัญหาหนึ่งที่คุณ Songsook เจอครับ ตอนเลิกคอร์ส นั่งลุ้นกัน 3 คนกับพี่ Phisit สักพักก็สามารถแก้ไขได้ เลยเอามาแชร์ไว้ เผื่อพวกเราเจอปัญหาเดียวกัน
ปัญหานั้นก็คือ จะสร้าง จะสั่ง จะทำอะไรทุกอย่างด้วย Cordova SDK หรือ PhoneGap SDK ต้องใส่ sudo ตลอด เรียกสั้นๆ ว่าวิธี “sudo โล้ด” ครับ
ปัญหาที่ก่อตัวขึ้น
การ sudo โล้ดในทุกคำสั่งเวลาทำงานกับ project PhoneGap จะทำให้เกิดสถานการณ์อย่างนี้ครับ
- เวลาสร้าง project ด้วย Cordova SDK ก็ต้องสั่ง sudo
sudo cordova create NextflowApp
- เวลา add platform ก็ต้องสั่ง sudo เช่นเดียวกันแบบนี้
sudo cordova platform add android sudo cordova platform add ios
- ทำให้ไม่สามารถ import Android project เข้ามาใน Eclipse ADT ได้ เพราะ sudo มันกันสิทธิ์เอาไว้ (ไว้ ไว้ ไว้)
- และทำให้เปิด iOS App project บน XCode 5 ไม่ได้เช่นกัน (กัน กัน กัน จะเอคโค่ทำไมเนี้ย)
ทางแก้ที่ยอดเยี่ยม
ในเมื่อปัญหามันเกิดจาก sudo เราก็ต้องแก้ไปที่ sudo ครับ ผลปรากฎว่าในเครื่องของคุณส่งสุขมี group ปริศนา ไม่มีที่มาที่ไป แต่หมายหัวไว้ว่า มันเป็นสาเหตุที่ทำให้ sudo กันโปรแกรม XCode และ Eclipse ไม่ให้เข้าไปรุ่มร่ามกับ PhoneGap app และ platform ของมัน
เราก็เลยหาวิธีปลด lock เจ้า sudo ของเรามาฝากพี่น้องไว้เผื่อเจอปัญหาคล้ายๆ กัน ซึ่งต้นฉบับเป็นของคุณ Francesco Frapporti ที่แนะนำวิธีการอ้างสิทธิ์ของตัวเราใน folder ที่ติดตั้ง Cordova SDK ใน StackOverflow ครับ
1. อ้างสิทธิ์ของเราบน folder ที่ติดตั้ง Cordova SDK (หรือ PhoneGap SDK)
นั่นคือเราต้องทำการอ้างสิทธิ์บน folder ที่ระบบจะใช้ติดตั้ง Cordova (หรือ PhoneGap SDK) ก่อน แล้วต่อติดตั้งตัว SDK
sudo chown -R $USER /usr/local npm install -g cordova
และถ้าพวกเราใช้ NodeJS รุ่นใหม่ ก็อาจจะมี error ติดอยู่ ทางที่ดีให้ clear cache ของ NodeJS ได้โดยการสั่งคำสั่งต่อไปนี้
sudo npm cache clear npm install -g cordova
2. ทดสอบเรียกคำสั่งสร้าง Project ด้วย Cordova SDK แบบไม่ใส่ sudo
ถ้าทุกอย่างเรียบร้อย เราจะสามารถรันคำสั่งต่อไปนี้โดยไม่ต้องใส่ sudo นำหน้าอีกต่อไป
cordova create MyApp cd MyApp cordova platform add android
หวังว่าคงช่วยผ่าทางตันให้หลายๆ คนได้นะครับ อย่าลืมแวะเข้าไปอัพเดตเนื้อหาในส่วนเริ่มต้นการเรียนรู้พัฒนา Mobile App ด้วย HTML5 และ PhoneGap 3 กันนะครับ