Đưa ứng dụng lên Heroku
Viết bởi Terence Lee, @hone02
1. Đăng ký Heroku
Làm theo các bước “Introduction”, “Set up” tại trang Getting Started on Heroku with Ruby để đăng ký tài khoản, cài đặt Heroku CLI và đăng nhập.
Ngoài ra, các bạn có thể tham khảo thêm về cách cài đặt heroku tại đây.
Coach: Nói về lợi ích của việc triển khai ứng dụng lên Heroku so với dạng máy chủ truyền thống.
2. Chuẩn bị
Hệ thống quản lý phiên bản
Như phần trước đã đề cập, chúng ta sẽ sử dụng git
để quản lý phiên bản. Có thể thực hiện điều này bằng cách chạy những dòng lệnh dưới đây trên terminal:
git init
git add .
git commit -m "initial commit"
Coach: Đây là thời điểm phù hợp để nói về hệ thống quản lý phiên bản và git.
Cập nhật cơ sở dữ liệu
Đầu tiên, chúng ta cần có cơ sở dữ liệu hoạt động trên Heroku. Hãy thay đổi dòng code sau ở trong Gemfile
:
gem 'sqlite3'
trở thành
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
Chạy lệnh bundle install --without production
để cài đặt.
Đừng quên chạy các lệnh git add .
và git commit -m "Use postgres as production database"
để thêm những thay đổi ở trên vào nhánh master trưóc khi đẩy chúng lên heroku.
Coach: Bạn có thể nói về hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) cũng như những hệ thống quản lý dữ liệu khác, cùng với vài chi tiết liên quan đến Heroku và PostgreSQL.
3. Triển khai ứng dụng
Khởi tạo Heroku app
Chúng ta tạo Heroku app với câu lệnh heroku create
trên terminal và sẽ nhận được kết quả như dưới đây:
Creating app... done, ⬢ young-reaches-87845
https://young-reaches-87845.herokuapp.com/ | https://git.heroku.com/young-reaches-87845.git
Trong trường hợp này, young-reaches-87845
là tên ứng dụng. Bạn có thể đổi lại tên khác cho dễ hiểu, dễ nhớ hơn.
Đẩy mã nguồn lên Heroku
Hãy thực hiện lệnh git push heroku master
, bạn sẽ nhận được kết quả như dưới đây:
Counting objects: 115, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (97/97), done.
Writing objects: 100% (115/115), 25.62 KiB | 0 bytes/s, done.
Total 115 (delta 10), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.2.4
remote: -----> Installing dependencies using bundler 1.11.2
remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote: Fetching gem metadata from https://rubygems.org/..........
remote: Fetching version metadata from https://rubygems.org/...
remote: Fetching dependency metadata from https://rubygems.org/..
remote: Installing concurrent-ruby 1.0.2
...
remote: -----> Launching...
remote: Released v5
remote: https://young-reaches-87845.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/young-reaches-87845.git
* [new branch] master -> master
Bạn có thể nhận biết ứng dụng đã được đẩy lên Heroku khi nhìn thấy dòng remote: —–> Launching… giống như trên.
Hợp nhất cơ sở dữ liệu
Tiếp theo, chúng ta cần hợp nhất dữ liệu như đã làm trên máy của bạn ở những phần trước bằng lệnh
heroku run rails db:migrate
Khi câu lệnh kết thúc việc chạy, ta có thể xem ứng dụng trên trình duyệt bằng URL. Với ứng dụng ví dụ, ta có thể truy cập tới https://young-reaches-87845.herokuapp.com/. Ta cũng có thể gõ lệnh heroku open
trên terminal để thấy trang.
Ghi chú
Môi trường Heroku không phải không có các hạn chế. Các ứng dụng chạy trên Heroku tồn tại trong môi trường không bền vững - điều đó có nghĩa rằng (ngoại trừ những thông tin lưu trong cơ sở dữ liệu) bất kỳ file nào được tạo bằng ứng dụng của bạn sẽ biến mất nếu nó khởi động lại (ví dụ như, khi đẩy lên một phiên bản mới).
Hệ thống file không bền vững
Mỗi dyno có một hệ thống file không bền vững của mình, với một bản copy của đoạn code được triển khai gần nhất. Trong suốt vòng đời của mình, dyno có thể dùng hệ thống file như một vùng tạm thời, mà không file nào được ghi được thấy trong bất kỳ dyno nào khác và bất kỳ file nào được viết sẽ được bỏ đi ở thời điểm dyno bị dừng hoặc chạy lại.
Trong phần hướng dẫn Xây dựng ứng dụng đầu tiên của bạn khả năng đính kèm file cho bản ghi Idea được thêm, kết quả là file mới được ghi trong thư mục public/uploads của ứng dụng. Lưu trữ không bền vững trong Heroku có thể được thấy như dưới đây:
- Khởi động ứng dụng với lệnh
heroku open
- Thêm một
Idea
với một bức hình - Khởi động lại ứng dụng bằng cách chạy lệnh
heroku restart
- Trở lại
Idea
và tải lại trang - bức hình không còn được nhìn thấy nữa
Làm việc với dạng Lưu trữ không bền vững
Vấn đề này rõ ràng không hữu ích gì cho hệ thống thật, tuy nhiên chúng ta có nhiều cách để làm việc với nó, vốn đã được sử dụng rất phổ biến.
Cách thông dụng nhất là dùng một dạng lưu trữ ngoài như Amazon S3 (Simple Storage Service) hay Rackspace CloudFiles. Các dịch vụ này cung cấp (với mức giá rẻ thường là dưới 0,1$ một GB) lưu trữ trên đám mây
( nghĩa là các file có thể được lưu ở bất cứ đâu), nơi ứng dụng có thể dùng như một kho lưu ổn định.
Chức năng này là một phần nằm ngoài hướng dẫn này, có một vài nguồn khác có thể tham khảo thêm:
Như mọi khi, nếu bạn muốn biết thêm bất kỳ thông tin hay hỗ trợ gì, huấn luyện viên của bạn sẽ giúp đỡ.
4. Sau khi deploy lên heroku
Nếu gặp lỗi không tiếp tục được với những phần tiếp theo, các bạn thực hiện 3 câu lệnh sau để fix lỗi:
sudo apt-get update
sudo apt-get install libpq-dev
gem install pg