Menu

Thursday, April 4, 2019

[Laravel - Exception] วิธีการแก้ไข exception หลังจากพลาดรันคำสั่ง php artisan config:cache
[Laravel - Exception] How to Fix Exception after Running php artisan config:cache Command

คำอธิบายของคำสั่ง config:cache คือ สร้าง cache file สำหรับการโหลดค่า config ที่เร็วขึ้น (คุณสามารถรันคำสั่ง php artisan ใน console เพื่อดูคำอธิบายของแต่ละคำสั่งได้)

อย่างไรก็ตาม ผลกระทบจากการรัน  php artisan config:cache อาจจะประกอบด้วย
  1. Website/APIs ของคุณจะตอบกลับด้วย error code 500 Internal Server Error เสมอ โดยไม่มี log ใดๆใน laravel.log
  2. ทุกคำสั่งที่รันด้วย php artisan จะ throw exception ตามภาพด้านล่าง
  3. ทุกคำสั่งที่รันด้วย composer จะรันได้ตามปกติ

วิธีแก้ไข exception นี้ คือ การลบ cache file ที่ถูกสร้างขึ้นมา ซึ่งสำหรับ Laravel 5.6 cache file ดังกล่าวจะอยู่ที่ bootstrap/cache/config.php

Sunday, March 31, 2019

[AWS] การติดตั้ง ELK อย่างง่ายบน AWS
[AWS] How to Install ELK on AWS

ELK stack เป็น platform สำหรับการจัดการ log ซึ่งประกอบไปด้วย 3 ส่วน คือ
  1. Elasticsearch (deep search and data analytics)
  2. Logstash (centralized logging and parsing)
  3. Kibana (powerful data visualizations)

การติดตั้งเริ่มต้นโดยเข้าไปที่ ELK Certified by Bitnami แล้วทำการ subscribe และทำตามขั้นตอนไปจนจบ ก็จะได้ Instance ที่มี ELK stack มาใช้งาน

Friday, March 29, 2019

[Docker] การติดตั้ง Docker และ Docker Compose บน Ubuntu
[Docker] How to Install Docker and Docker Compose on Ubuntu

ถ้าหากเครื่อง server ยังไม่ได้ติดตั้ง curl ให้ติดตั้ง curl ก่อน โดยใช้คำสั่งดังนี้
sudo apt-get install curl
หลังจากนั้นให้ติดตั้ง Docker โดยใช้คำสั่งดังนี้
sudo curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
สำหรับการทดสอบ เมื่อติดตั้ง Docker สำเร็จแล้ว ให้รันคำสั่งดังนี้
docker run hello-world
จะได้ผลลัพธ์ดังรูป


หลังจากนั้นให้ติดตั้ง Docker Compose โดยใช้คำสั่งดังนี้ 
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
สำหรับการทดสอบ เมื่อติดตั้ง Docker Compose สำเร็จแล้ว ให้รันคำสั่งดังนี้
docker-compose -v
จะได้ผลลัพธ์ดังรูป


Tuesday, February 5, 2019

[Server - Ubuntu] การสร้างหรือต่ออายุ Let's Encrypt Certificate สำหรับ Website
[Server - Ubuntu] How to Create or Renew Let's Encrypt Certificate for Website

สมมติว่า ได้ลง certbot ไว้ในเครื่อง server เรียบร้อยแล้ว
  1. รันคำสั่ง sudo certbot certonly -d {domain_name}
  2. เลือก option ที่ 2 เพื่อใช้วิธีการระบุ path ของ public folder ของเว็บแทนการสร้าง standalone web server ขึ้นมา
  3. ใส่ path ของ public folder แล้วกด enter 
ไฟล์ certificates ที่ถูกสร้างใหม่ จะอยู่ใน folder /etc/letsencrypt/live/{domain_name} ซึ่งเราสามารถนำไฟล์นี้ไปแทนที่ไฟล์ certificates เดิมที่กำลังจะหมดอายุได้เลย

[Laravel - Command] วิธีการเรียกใช้ command ที่ถูกต้อง จากอีก command นึงใน Laravel
[Laravel - Command] How to Call Laravel Command from Other Commands

บางครั้งเราต้องการสร้าง command เพื่อเรียกใช้ชุด command ที่ได้สร้างไว้ก่อนหน้าแล้ว

สมมติว่า มี 2 commands คือ command A และ B แล้วเราสร้าง command C มาอีกตัว เพื่อเรียกใช้ 2 commands นี้

ถ้าหากเป็นการเรียกรัน command จาก controller ปกติ ก็จะใช้คำสั่งดังนี้
Artisan::call('A');
Artisan::call('ฺB');

แต่สำหรับการเรียกรัน command จากอีก command นึง ห้ามใช้ Artisan::call โดยเด็ดขาด เนื่องจากถ้าหากเกิด exception ขึ้น มันจะไม่ throw exception ออกมายัง command C ทำให้ command C สามารถรันต่อจนเสร็จได้ ถึงแม้จะเกิด exception ใน command A หรือ B ซึ่งเราจะไม่สามารถรู้ได้เลยว่า มันทำงานเสร็จแล้วจริงๆหรือมันเกิด exception ขึ้น ถ้าเราไม่ดูจาก error logs

ในความเป็นจริงแล้ว เราควรจะรู้ว่า command ใดเกิด exception ขึ้น และไม่มีความจำเป็นที่ต้องรัน command อื่นๆต่อไป ในกรณีที่ exception ได้เกิดขึ้นแล้ว ดังนั้นให้ใช้ $this->call แทนดังนี้
$this->call('A');
$this->call('ฺB');

อ่านเพิ่มเติม: https://laravel.com/docs/5.7/artisan#calling-commands-from-other-commands