+14

Deploy ứng dụng Rails sử dụng hệ quản trị cơ sở dữ liệu mysql hoàn toàn miễn phí với Heroku

Với những người tiếp cận với framework rails thông qua quyển thánh kinh Railstutorial(https://www.railstutorial.org/book) hẳn đã quen với việc deploy rails app với heroku( Chapter 1: From zero to deploy) và sử dụng hệ quản trị cơ sở dữ liệu sqlite ở development và postgresql ở production. Tuy nhiên đối với cơ sở dữ liệu mysql thì sẽ cần phải config lại một vài chỗ mới có thể deploy trên heroku

1. Thiết lập môi trường phía local

Đầu tiên muốn deploy ứng dụng lên heroku chúng ta cần phải có 2 thứ khá quan trọng là tài khoản herokucode của ứng dụng

1.1 Tài khoản heroku

Nếu chưa có tài khoản heroku thì tạo tài khoản tại địa chỉ:

https://www.heroku.com/

Đăng nhập với heroku sẽ tương tự như trong Chapter 1 của tutorial:

https://www.railstutorial.org/book/beginning

Tạo một app trên heroku với câu lệnh heroku create Sau đó chúng ta sẽ nhận được đường link của ứng dụng và link git heroku

1.2 Thiết lập môi trường sử dụng hệ quản trị mysql ở phía development

Trước hết tạo một repo trên github.com và một project ở local

rails new deploy_mysql -d mysql

Config lại file config/database.yml để sử dụng mysql:

Cài đặt thêm gem "mysql2", "~> 0.3.20" vào Gemfile

Cuối cùng chúng ta tạo remote với link git của heroku như đã có được ở phần 1.1 với câu lệnh git remote add heroku *link_git* để có thể push code lên production

Như vậy chúng ta đã setup hoàn chỉnh cho việc sử dụng hệ quản trị mysql cho ứng dụng Rails

2. Thiết lập tài khoản heroku

2.1 Cài đặt nơi lưu trữ cơ sở dữ liệu

Do Heroku không hỗ trợ mysql như một lựa chọn mặc định, do đó chúng ta phải config và lựa chọn Data stores tại https://elements.heroku.com/addons

Tại đây chúng ta có hai lựa chọn (miễn phí) cung cấp MariaDB hoặc MySQL:

Trong ví dụ lần này mình sẽ chọn JawsDB MySQL

Click chọn button Install JawsDB MySQL

Tại đây chúng ta chọn plan mặc định là Kitefin Shared (Gói free) và add app đã tạo tương ứng vào (Trong ví dụ lần này app của mình đã tạo trong phần 1.1 có tên là fast-water-37314)

Tiếp đó lựa chọn Provision add-on

Với tài khoản chưa được verify bằng credit card sẽ xuất hiện thông báo

Truy cập https://heroku.com/verify để verify tài khoản với credit card. Tài khoản mình đã verify sẽ có dạng :

Sau khi update Credit Card và Provision add-on sẽ redirect đến màn hình chứa thông tin để setting cho JawsDB

2.2 Deploy code lên production

Trước hết tạo commit và push code hiện tại lên heroku

git add .

git commit -m "deploy"

git push heroku *nhánh hiện tại*:master

và như thế code mới nhất đã có trên repo heroku:

2.3 Kết nối với hệ quản trị trên production

Trước hết, để xem tất cả các biến cấu hình heroku sử dụng lệnh:

heroku config

Khi đó chúng ta sẽ thấy các biến như JAWSDB_URL, RACK_ENV, LANG, RAILS_LOG_TO_STDOUT,....

Các ứng dụng Ruby on Rails có thể sử dụng cơ sở dữ liệu được cấp phép bằng cách đặt lại biến môi trường DATABASE_URL của chúng với giá trị được giữ bởi JAWSDB_URL. Từ đó heroku có thể tự động tạo ra một file database.yml tương ứng giống như ở development. Những thao tác này ta có thể thao tác thông qua GUI ở phần Setting của app tương ứng trong https://dashboard.heroku.com/apps Tuy nhiên ở đây mình sẽ setup bằng dòng lệnh (và theo mình thì nó khá đơn giản so với GUI):

  • Lấy giá trị của JAWSDB_URL từ tài khoản heroku:
 heroku config:get JAWSDB_URL

  • đặt tham số DATABASE_URL của bạn thành giá trị được trả về bởi lệnh trước đó.

heroku config:set DATABASE_URL="mysql2://qzwqu13lmp9eycfl:fhidlw6xq2uxc1ri@nuskkyrsgmn5rw8c.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/etfozt12vh9mbpgs"

LƯU Ý: Do sử dụng gem mysql2 nên đường dẫn set cho DATABSEURL sẽ set giá trị JAWSDBURL có chút thay đổi là chuyển từ mysql -> mysql2

  • Cập nhật lại với câu lệnh

bundle install

  • JawsDB bây giờ đã sẵn sàng để sử dụng với ứng dụng Rails .Giờ chúng ta chỉ cần thiết lập cơ sở dữ liệu bằng những câu lệnh đơn giản

heroku run rake db:create db:migrate

3. Kết luận

Do sự phổ biến của mysql, chúng ta có thể sử dụng ngay tại môi trường development cũng như production, và đối với rails, heroku là một môi trường miễn phí rất hấp dẫn, chúng ta có thể demo ứng dụng của mình hoàn toàn miễn phí trên heroku mà không nhất thiết phải sử dụng postgreSQL(hệ QTCSDL mặc định của heroku). Đối với bài viết này mình đã hướng dẫn cách setup đối với mySQL(một HQTCSDL khá phổ biến), chúc các bạn thành công

4.Nguồn

https://devcenter.heroku.com/articles/jawsdb


All rights reserved

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í