20Oct, 2020
ภาษา :
Thai
Share blog : 
20 October, 2020
Thai

Deploy Rails App ง่าย ๆ ด้วย Capistrano

By

3 mins read
Deploy Rails App ง่าย ๆ ด้วย Capistrano

Capistrano เป็น tools ตัวหนึ่งที่ใช้ในการ deploy application ต่าง ๆ ไปยัง server ที่ถูกพัฒนาโดยภาษา Ruby แต่สามารถใช้ deploy ได้กับทุก ๆ เว็บ ทุก ๆ ภาษาจากการรันแค่ cap production deploy 

ก่อนจะ deploy

  1. เครื่อง server ต้องสามารถเข้าถึง repository ผ่าน ssh ได้
  2. เครื่องที่รัน cap production deploy ต้องสามารถเข้าถึง  server และ repository ผ่าน ssh ได้ โดยเครื่องที่รันอาจจะเป็น Local Machine หรือ Continuous deployment tool (CD)

Installation

1. เพิ่มไปยัง Gemfile

...
gem "capistrano"..

2. รัน bundle insatll

3. รัน cap install

4. config ไฟล์ config/deploy.rb, config/deploy/production.rb และ Capfile

5.  รัน cap produciton deploy (production จะอิงตามชื่อไฟล์ใน config/deploy/*)

โครงสร้างของ Capistrano

├── current -> /var/www/my_app_name/releases/20150120114500/
├── releases
│   ├── 20150080072500
│   ├── 20150090083000
│   ├── 20150100093500
│   ├── 20150110104000
│   └── 20150120114500
├── repo
│   └── <VCS related data>
├── revisions.log
└── shared    └── <linked_files and linked_dirs>
  • current - เป็นโฟลเดอร์ที่ทำ symlink version ล่าสุดจาก  โฟลเดอร์ `releases`
  • releases - เป็นโฟลเดอร์เก็บการ deploy ทั้งหมด สามารถ rollback version ได้ default จะเป็น 5 version
  • repo - เป็นโฟลเดอร์ที่ git clone ลงมาแต่เป็นการ clone แบบ mirror ผ่าน SSH
  • revisions.log - เก็บ log การ deploy
  • shared - เป็นโฟลเดอร์ที่เก็บไฟล์ และโฟลเดอร์ที่จะใช้ร่วมกันในทุก ๆ การ deploy เช่น โฟลเดอร์ไฟล์ log, ไฟล์ environment ต่าง ๆ หรือจะเป็นการตั้งค่าฐานข้อมูล

เมื่อรันแล้วสิ่งที่ Capistrano ทำ

  1. check การเชื่อมต่อกับ git ผ่าน SSH
  2. check และ สร้าง folder ตาม capistrano structure
  3. check ไฟล์และโฟลเดอร์ใน shared folder ตามที่ config ไว้
  4. git clone และ update
  5. สร้าง release folder ตาม timestamped ไว้ที่ releases/*
  6. ทำ symlink ไฟล์และโฟลเดอร์ต่างๆ จาก shared folder มาที่ release folder
  7. ทำ symlink จาก release folder (version ล่าสุด) มา current folder
  8. ลบ release เก่าที่สุดออกจาก releases/* 
  9. เก็บ log การ release 

Capistrano

เบื้องต้นสิ่งที่ Capistrano ทำก็มีเท่านี้ แต่พอเป็นเว็บจริง ๆ แล้วก็จะต้องมีการรันคำสั่งเพิ่มเติม เช่น ถ้าเป็น NxJS ก็จะต้องรัน build production และรัน server หรือจะเป็น Ruby on Rails ที่ต้อง asset precompile, migration และ รัน start server

และเมื่อเป็นแบบนี้แล้วก็จะใช้ libs เพิ่มเติมได้ ดังต่อไปนี้

NxJS

gem "capistrano" 
gem "capistrano-yarn"

Ruby on Rails

gem "capistrano"
gem "capistrano-rails"
gem "capistrano-bundler"
gem "capistrano-rbenv"
gem "capistrano-yarn"
gem "capistrano-db-tasks"
gem "capistrano-rails-console"
gem "capistrano-rails-db"
gem "capistrano-rails-logs-tail"
gem "capistrano-rake"

เมื่อเพิ่มไปใน Gemfile แล้วต้องไปเพิ่ม require ไว้ที่ Capfile ด้วย ซึ่งแต่ละอย่างสามารถดู Document ของแต่ละอันได้เลยครับ จากตัวอย่างข้างต้นเป็นเพียงส่วนหนึ่งที่ใช้ หากคุณใช้ sidekiq, whenever หรืออื่น ๆ ที่จำเป็นต้องรันหลังจาก deploy แล้วต้องไปหาดูว่ามี capistrano หรือไม่

เพียงเท่านี้เราก็ได้การ deploy เว็บต่าง ๆ ขึ้น server ได้เพียงคำสั่งเดียวแล้ว

ติดตามอ่านบทความดี ๆ ที่น่าสนใจ ไม่ว่าจะเป็น Machine Learning, Startup, Design, Software Development และ Management ทาง Senna Labs Blog ได้ทุกวัน

Written by
Senna Labs
Senna Labs

Subscribe to follow product news, latest in technology, solutions, and updates

- More than 120,000 people/day visit to read our blogs

บทความอื่นๆ

16
November, 2024
JS class syntax
16 November, 2024
JS class syntax
เชื่อว่าหลายๆคนที่เขียน javascript กันมา คงต้องเคยสงสัยกันบ้าง ว่า class ที่อยู่ใน js เนี่ย มันคืออะไร แล้วมันมีหน้าที่ต่างกับการประกาศ function อย่างไร? เรามารู้จักกับ class ให้มากขึ้นกันดีกว่า class เปรียบเสมือนกับ blueprint หรือแบบพิมพ์เขียว ที่สามารถนำไปสร้างเป็นสิ่งของ( object ) ตาม blueprint หรือแบบพิมพ์เขียว( class ) นั้นๆได้ โดยภายใน class

By

4 mins read
Thai
16
November, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
16 November, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
ผู้ให้บริการเครือข่ายในสหรัฐฯ ได้เปิดตัว 5G ในหลายรูปแบบ และเช่นเดียวกับผู้ให้บริการเครือข่ายในยุโรปหลายราย แต่… 5G มันคืออะไร และทำไมเราต้องให้ความสนใจ บทความนี้ได้รวบรวม 15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G เพราะเราปฏิเสธไม่ได้เลยว่ามันกำลังจะถูกใช้งานอย่างกว้างขวางขึ้น 1. 5G หรือ Fifth-Generation คือยุคใหม่ของเทคโนโลยีเครือข่ายไร้สายที่จะมาแทนที่ระบบ 4G ที่เราใช้อยู่ในปัจจุบัน ซึ่งมันไม่ได้ถูกจำกัดแค่มือถือเท่านั้น แต่รวมถึงอุปกรณ์ทุกชนิดที่เชื่อมต่ออินเตอร์เน็ตได้ 2. 5G คือการพัฒนา 3 ส่วนที่สำคัญที่จะนำมาสู่การเชื่อมต่ออุปกรณ์ไร้สายต่างๆ ขยายช่องสัญญาณขนาดใหญ่ขึ้นเพื่อเพิ่มความเร็วในการเชื่อมต่อ การตอบสนองที่รวดเร็วขึ้นในระยะเวลาที่น้อยลง ความสามารถในการเชื่อมต่ออุปกรณ์มากกว่า 1 ในเวลาเดียวกัน 3. สัญญาณ 5G นั้นแตกต่างจากระบบ

By

4 mins read
Thai
16
November, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
16 November, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
ในปัจจุบันนี้ ปฏิเสธไม่ได้เลยว่าภาษาที่ถูกใช้ในการเขียนเว็บต่าง ๆ นั้น คงหนีไม่พ้นภาษา Javascript ซึ่งเป็นภาษาที่ถูกนำไปพัฒนาเป็น framework หรือ library ต่าง ๆ มากมาย ผู้พัฒนาหลายคนก็มีรูปแบบการเขียนภาษา Javascript ที่แตกต่างกัน เราเลยมีแนวทางการเขียนที่หลากหลาย มาแบ่งปันเพื่อน ๆ เกี่ยวกับการจัดการ Array ด้วยภาษา Javascript กัน เรามาดูตัวอย่างกันเลยดีกว่า โดยปกติแล้วการ copy ค่าจาก value type ธรรมดา สามารถเขียนได้ดังนี้

By

4 mins read
Thai

Let’s build digital products that are
simply awesome !

We will get back to you within 24 hours!ติดต่อเรา
Please tell us your ideas.
- Senna Labsmake it happy
Contact ball
Contact us bg 2
Contact us bg 4
Contact us bg 1
Ball leftBall rightBall leftBall right
Sennalabs gray logo28/11 Soi Ruamrudee, Lumphini, Pathumwan, Bangkok 10330+66 62 389 4599hello@sennalabs.com© 2022 Senna Labs Co., Ltd.All rights reserved.