Yêu cầu thg 3 27, 2020 7:04 SA 291 1 2
  • 291 1 2
0

Hỏi về cách deploy ứng dụng ruby on rails

Chia sẻ
  • 291 1 2

chào các anh chị,

Em là newbie ruby on rails, gần đây em đang tự đọc thêm mấy phần liên quan đến deploy và em có một thắc mắc như sau:

Giả sử, project em đang làm, cần làm việc với sidekiq, trên máy cá nhân, thì em chỉ việc trỏ vào thư mục project rồi chạy lệnh bundle exec sidekiq để chạy sidekiq lên cho dự án.

Vậy còn trên server, em thấy hình như không ai trỏ vào thư mục project trên server rồi gõ lệnh chạy sidekiq cả 😐

tương tự như vậy,em thấy không ai cần rails s để chạy project (trên server).

Vậy cách để chạy auto project (và các phần mềm cần thiết) trong deploy gọi là gì và em có thể tìm hiểu thêm vấn đề này bằng cách google với các keywords nào?

Mong các anh chị giải đáp giúp em. Xin lỗi mọi người vì hiểu biết em còn hạn hẹp nên cách mô tả vấn đề không được tường mình (bow)

2 CÂU TRẢ LỜI


Đã trả lời thg 3 27, 2020 8:53 SA
Đã được chấp nhận
+9

Câu hỏi của bạn quá chung chung, lại có những điểm khá chi tiết nên mình cũng không chắc phải trả lời thế nào cho phải 😀 Nên mình cũng sẽ trả lời chung chung 🤣

Deploy một web service nói chung lên môi trường production mà một phần việc tương đối phức tạp (thuộc về mảng infrastructure) mà không phải ngày một ngày hai mà lĩnh hội hết được. Giải thích nôm na là bạn cần cài cắm khá nhiều thứ lên một hoặc nhiều server, liên kết chúng với nhau để có thể thực hiện được nhiều tác vụ khác nhau như vận hành HTTP server (phổ biến thì có Nginx hay Apache), web server (với Rails thì có các lựa chọn như Unicorn, Puma, Passenger...), dababase (MySQL, Postgres...), các công cụ monitor (Monit, Munin)...

Thực ra trên máy tính của bạn (môi trường development) bạn cũng đã và đang làm những điều tương tự như là cài đặt database, khởi động database, khởi động web server (chạy rails s) tuy nhiên là ở môi trường development với độ ổn định và chịu tải không cao, do nó chỉ phục vụ cho mục đích phát triển. Môi trường production yêu cầu phải có nhiều thành phần và cơ chế hơn để đảm bảo tính ổn định (khó bị down, có bị down thì phải có cơ chế auto restart) và chịu tải tốt (rails s của bạn ở máy nếu bạn access từ 10 tabs khác nhau trên trình duyệt thì sẽ thấy các request sẽ phải xếp hàng chờ nhau, trong khi môi trường production thì phải đảm bảo xử lý cho nhiều user request 1 lúc, mà cái nào cũng phải nhanh)

Bạn vẫn có thể thử vào server online của bạn, cài đặt rails, database, git, pull project về và chạy rails s -e production và nó vẫn sẽ chạy 😇 (ngày xưa làm cái dịch vụ đặt sữa chua cho công ty bọn mình cũng làm vậy cho ... nhanh) nhưng nó sẽ bất ổn đúng như khi bạn chạy môi trường development trên máy bạn 😃

Trả lời kỹ hơn cho những ý chi tiết của bạn

Không ai trỏ vào thư mục project trên server rồi gõ lệnh chạy sidekiq cả

Không ai cần rails s để chạy project (trên server)

Là bởi vì sau khi deploy xong thì web server(s) hay worker(s) phục vụ cho sidekiq sẽ được tự khởi động và theo dõi nhờ các commands được config từ trước.

Một ví dụ nhỏ bạn có thể tham khảo nhanh file này

https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-unicorn-and-nginx-on-ubuntu-14-04#create-unicorn-init-script

Trong đó có command cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D để khởi động unicorn đó. Tham khảo nhanh thôi nhé, đọc kỹ lại bị hoang mang 😱

Nói chung mình nghĩ ai mới bắt đầu thì cũng có thắc mắc như bạn cả thôi. Mình ngày xưa cũng vậy 😃

Mình không phải chuyên về infra nên mình chọn cách đọc guide làm theo cho chạy được đã rồi dần dần ngộ ra về cách vận hành của từng thành phần, kiến tha lâu cũng có ngày đầy tổ.

Keywords tìm kiếm thì cũng có nhiều lắm, cũng như cách deploy thì cũng có hàng chục hàng trăm cách khác nhau, có cách ăn sẵn chả phải làm gì, có cách thì phải làm rất nhiều bước phức tạp và pro. Ăn sẵn thì bạn có thể dùng HEROKU https://www.heroku.com/ vô cùng thân thiện với Rails, cho đến giờ mình vẫn dùng với các dự án cá nhân và các dự án nhỏ. Nếu bạn có kiến thức về Docker thì đó cũng là một cách ăn sẵn, mọi thứ để nằm đó chờ bạn sử dụng thôi.

https://viblo.asia/p/deploy-rails-app-on-heroku-qm6RWqAnGeJE

https://viblo.asia/p/dockerize-rails-app-using-docker-and-docker-compose-924lJW765PM

Phức tạp hơn thì bạn tham khảo các bài viết sau trên Viblo để lấy các từ khoá nhé 😃

https://viblo.asia/p/deploy-ung-dung-rails-voi-capistrano-va-unicorn-1VgZvoJ7lAw

https://viblo.asia/p/huong-dan-deploy-ung-dung-ruby-on-rails-len-server-aws-ec2-su-dung-gem-capistrano-puma-va-nginx-Eb85oXDWK2G

https://viblo.asia/p/deploy-rails-application-voi-nginx-va-passenger-Ljy5VXy9Zra

TL;DR Chúc bạn thành công!

Chia sẻ
Avatar Tran Duc Thang @thangtd90
thg 3 27, 2020 9:29 SA

Câu trả lời có tâm quá anh ơi 👍

Avatar Thien Ha @thienhavosong
thg 3 28, 2020 6:20 SA

hay qúa anh ơi, cảm ơn anh nhiều nhiều 🙇 :😅

Đã trả lời thg 3 27, 2020 8:29 SA
+2

Bạn tìm hiểu cách dùng Nginx và Unicorn nhé. "How to deploy ruyby of rails using nginx and unicorn". Ngoài ra tìm hiểu thêm về Docker, để deploy nhanh hơn.

Chia sẻ
Avatar Thien Ha @thienhavosong
thg 3 28, 2020 6:19 SA

cảm ơn bạn nhiều nhiều

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí