Menu

Friday, January 29, 2021

[OpenEDX] วิธีแก้ไขข้อผิดพลาด "DoesNotExist: Site matching query does not exist."
[OpenEDX] How to Fix "DoesNotExist: Site matching query does not exist."

กรณีที่เรายังไม่ได้สร้าง Site ที่ชื่อตรงกับ domain ของเรา แล้วเราไปลบ Site ที่มี id เป็น 1 ออกจาก database เวลาเรียกหน้าเว็บจะเกิด error ดังนี้
DoesNotExist: Site matching query does not exist.
เนื่องจากชื่อ domain ของเราจะถูกดึงมาจาก Request header แล้วนำไปเทียบกับ Site ใน database

เมื่อระบบหา Site ที่ตรงกันไม่ได้ ระบบจึงใช้ค่า SITE_ID=1 ใน /edx/app/edxapp/edx-platform/lms/envs/common.py เป็นค่าตั้งต้น

หลังจากนั้น ระบบจะนำค่า SITE_ID ไปหา Site ที่มี id ตรงกัน

เมื่อระบบไม่สามารถหา Site ได้ จึงได้ค่าเป็น None และทำให้เกิดการแจ้งข้อผิดพลาดข้างต้น

วิธีแก้ไข คือ แก้ไข SITE_ID ใน /edx/app/edxapp/edx-platform/lms/envs/common.py เป็น ID ของ Site ที่ต้องการให้เป็นค่าตั้งต้น ถ้าหากยังไม่มี Site เลย ให้ทำการสร้าง Site ก่อน

Monday, January 25, 2021

[PHP - Composer] วิธีการรัน Composer แบบไม่จำกัดหน่วยความจำและไม่ต้องแก้ไขไฟล์ php.ini
[PHP - Composer] How to Run Composer with Unlimited Memory and Do Not Update PHP INI File

เมื่อเรารัน composer install หรือ composer require เราอาจจะเจอกับ error ข้างล่างนี้ ทำให้เราไม่สามารถติดตั้ง package ที่เราต้องการได้

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223

อีกทั้งการแก้ไขขนาด memory ในไฟล์ php.ini ก็ดูเกินความจำเป็นไป

วิธีการรัน composer โดยไม่จำกัดขนาด memory สามารถรันได้ด้วยคำสั่งดังนี้

COMPOSER_MEMORY_LIMIT=-1 composer require {package_name}

สำหรับข้อมูลเพิ่มเติม อ่านได้ที่ Memory limit errors

Thursday, January 21, 2021

[NodeJS - NestJS] ข้อควรระวัง: Class transformer ไม่ตัด properties ส่วนเกินออกจาก Object ปลายทาง
[NodeJS - NestJS] Caution: Class transformer not stripping additional properties

Class transformer เป็นส่วนประกอบนึงของ NestJS ที่ใช้ในการแปลง JSON object ใดๆเป็น class instance ที่เราต้องการ และยังถูกใช้ในการแปลง request ที่ส่งเข้ามาให้เป็น class ที่เราต้องการโดยอัตโนมัติอีกด้วย

สมมติว่า เรามี function ใน controller ดังนี้
@Post()
async createRole (@Body() req: CreateRoleReqDto): Promise <Role> {
    let role = await this.roleService.createRole(req);
    return role;
}
และ class CreateRoleReqDto สำหรับ request ของเราเป็นดังนี้
export class CreateRoleReqDto{
    name: string;
    description?: string;
    permissionIds?: number[];
}
เมื่อเราส่ง request body ดังนี้
{
    "name":"test3",
    "description":"def",    
    "permissionIds": [1,2]
}
request body ของเราจะถูกแปลงเป็น instance ของ CreateRoleReqDto โดยอัตโนมัติ 

Friday, January 15, 2021

[System - Linux] วิธีการ Monitor การใช้งาน CPU หน่วยความจำและพื้นที่ว่างของฮาร์ดดิสก์แบบ Real Time
[System - Linux] How to Monitor CPU, Memory and Disk Space in Real Time

การ Monitor CPU และ RAM

เราจะใช้ htop 

เมื่อเราติดตั้ง htop เรียบร้อยแล้ว เราสามารถ monitor CPU และ RAM โดยรันคำสั่งดังนี้

htop

การ Monitor พื้นที่ว่างของ Harddisk 

เราจะใช้คำสั่งดังนี้

watch --interval=60 df --human-readable /dev/sda1

โดยที่ /dev/sda1 เป็น partition ที่ต้องการ monitor


หมายเหตุ เราสามารถดูรายการ partition ทั้งหมดได้ โดยใช้คำสั่งดังนี้

sudo lsblk

โดยชื่อ partition จะต้องใส่ /dev/ นำหน้า เช่น /dev/xvda1 ตามชื่อในรูป

[System - Linux] วิธีการตรวจสอบพื้นที่ของดิสก์ ขนาดของแฟ้มข้อมูลและไฟล์
[System - Linux] How to Check Disk Space, Folder Size and File Size

วิธีการตรวจสอบพื้นที่ของดิสก์ เราจะใช้คำสั่งดังนี้
df -h

วิธีการตรวจสอบขนาดของแฟ้มข้อมูล เราจะใช้คำสั่งดังนี้
du -h

วิธีการตรวจสอบขนาดของไฟล์ เราจะใช้คำสั่งดังนี้
ls -la

[System - Linux] วิธีการตรวจสอบข้อมูล Log ของ Cron บน Linux Server แต่ละประเภท
[System - Linux] How to Find Cron Logs on Each Type of Linux Server

Ubuntu และ Debian

ข้อมูล log ของ cron จะถูกรวมอยู่ใน /var/log/syslog 

วิธีการตรวจสอบ log ให้ใช้คำสั่งดังนี้

grep CRON /var/log/syslog

CentOS and Redhat

ข้อมูล log ของ cron จะแยกไว้ที่ /var/log/cron 

วิธีการตรวจสอบ log ให้ใช้คำสั่งดังนี้

tail /var/log/cron