+2

Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 7) - Deploy App On Heroku

Xin chào các bạn, Hôm nay mình sẽ tiếp tục hướng dẫn các bạn Series Hướng Dẫn Lập Trình Ruby on Rails (Phần 7) trong phần này, mình sẽ hướng dẫn các bạn cách để deploy ứng dụng login_app của chúng ta lên Internet để có thể truy cập từ bất cứ đâu, đây là bước cuối cùng để hoàn thiện một sản phẩm Website.

Git & Github

Git là gì ?

Git là tên gọi của một Hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS) là một trong những hệ thống quản lý phiên bản phân tán phổ biến nhất hiện nay. DVCS nghĩa là hệ thống giúp mỗi máy tính có thể lưu trữ nhiều phiên bản khác nhau của một mã nguồn được nhân bản (clone) từ một kho chứa mã nguồn (repository), mỗi thay đổi vào mã nguồn trên máy tính sẽ có thể ủy thác (commit) rồi đưa lên máy chủ nơi đặt kho chứa chính. Và một máy tính khác (nếu họ có quyền truy cập) cũng có thể clone lại mã nguồn từ kho chứa hoặc clone lại một tập hợp các thay đổi mới nhất trên máy tính kia. Trong Git, thư mục làm việc trên máy tính gọi là Working Tree. Đại loại là như vậy.

Ngoài ra, có một cách hiểu khác về Git đơn giản hơn đó là nó sẽ giúp bạn lưu lại các phiên bản của những lần thay đổi vào mã nguồn và có thể dễ dàng khôi phục lại dễ dàng mà không cần copy lại mã nguồn rồi cất vào đâu đó. Và một người khác có thể xem các thay đổi của bạn ở từng phiên bản, họ cũng có thể đối chiếu các thay đổi của bạn rồi gộp phiên bản của bạn vào phiên bản của họ. Cuối cùng là tất cả có thể đưa các thay đổi vào mã nguồn của mình lên một kho chứa mã nguồn.

Cơ chế lưu trữ phiên bản của Git là nó sẽ tạo ra một “ảnh chụp” (snapshot) trên mỗi tập tin và thư mục sau khi commit, từ đó nó có thể cho phép bạn tái sử dụng lại một ảnh chụp nào đó mà bạn có thể hiểu đó là một phiên bản. Đây cũng chính là lợi thế của Git so với các DVCS khác khi nó không “lưu cứng” dữ liệu mà sẽ lưu với dạng snapshot.

Github là gì ?

Mình biết là có rất nhiều bạn khi nghe nói đến Git sẽ nghĩ ngay đến Github và có thể sẽ có một số hiểu lầm với họ. Cũng xin nhắc lại rằng, Git là tên gọi của một mô hình hệ thống. Như mình đã giải thích ở trên, các máy tính có thể clone lại mã nguồn từ một repository và Github chính là một dịch vụ máy chủ repository công cộng, mỗi người có thể tạo tài khoản trên đó để tạo ra các kho chứa của riêng mình để có thể làm việc.

Mặc dù Git có thể làm việc với bất kỳ trên máy chủ Linux nào nhưng để dễ hiểu và thực tế hơn, mình sẽ hướng dẫn các bạn sử dụng Git với Github trong suốt serie này.

Liên kết: Đăng ký tài khoản Github

Tại sao nên sử dụng Git?

Có rất nhiều lợi thế để bạn nên sử dụng Git trong việc lập trình ngay từ hôm nay, bất kể là lập trình cái gì đi chăng nữa.

Git dễ sử dụng, an toàn và nhanh chóng. Có thể giúp quy trình làm việc code theo nhóm đơn giản hơn rất nhiều bằng việc kết hợp các phân nhánh (branch). Bạn có thể làm việc ở bất cứ đâu vì chỉ cần clone mã nguồn từ kho chứa hoặc clone một phiên bản thay đổi nào đó từ kho chứa, hoặc một nhánh nào đó từ kho chứa. Dễ dàng trong việc deployment sản phẩm. Và nhiều hơn thế nữa. Nếu bạn là một lập trình viên thì Git là một hệ thống bạn cần phải biết cách sử dụng, ít nhất là ngay từ bây giờ.

Cài đặt git

Cài Git vào Linux

Nếu bạn đang sử dụng hệ điều hành Ubuntu/Debian thì có thể sử dụng lệnh sau để cài Git.

$ sudo apt-get install git

Hoặc lệnh sau để cài trên CentOS/Fedora/RHEL.

$ yum install git

Để kiểm tra xem bạn đã cài đặt thành công hay chưa, mở terminal và gõ thử git --version nếu hiện ra như bên dưới là ok rồi đấy 😃

minhduc@minhduc-K42F:~$ git --version
git version 1.9.1
Thiết lập chứng thực cá nhân

Sau khi cài Git xong, việc đầu tiên bạn nên làm là khai báo tên và địa chỉ email vào trong file cấu hình của Git trên máy. Để làm điều này bạn sẽ cần sử dụng hai lệnh sau đây để thiết lập tên và email.

$ git config --global user.name "Minh Duc"
$ git config --global user.email "duc11t3bk@gmail.com"

Sau khi thiết lập xong, bạn có thể kiểm tra thông tin chứng thực trên user của bạn bằng cách xem tập tin ~/.gitconfig (nhắc lại rằng dấu ~ nghĩa là thư mục gốc của user).

$ cat ~/.gitconfig
[user]
 name = Minh Duc
 email = duc11t3bk@gmail.com

Push source code to Github

Ok như vậy là chúng ta đã hoàn tất các bước chuẩn bị push code lên Github lưu trữ. Các bạn cần tạo cho mình một tài hoản github tại đây Đăng ký tài khoản Github

Sau khi đăng nhập, các bạn vào đây https://github.com/new để tạo mới 1 repository có tên là login_app

Giờ chúng ta sẽ đẩy source của login_app ở local lên repository login_app trên github vừa tạo nhé,

Mở console di chuyển đến thư mục login_app thực hiện các lệnh bên dưới

Khởi tạo git local repository

minhduc@minhduc-K42F:~/login_app$ git init
Initialized empty Git repository in /home/minhduc/login_app/.git/

Ban nãy sau khi tạo xong repository trên github nó sẽ hiện ra như bên dưới

Để push được code lên repository này ta cần add remote đến nó bằng lệnh git remote add <link_remote_repository>

minhduc@minhduc-K42F:~/login_app$ git remote add origin https://github.com/duc11t3bk/login_app.git
minhduc@minhduc-K42F:~/login_app$ git remote -v
origin	https://github.com/duc11t3bk/login_app.git (fetch)
origin	https://github.com/duc11t3bk/login_app.git (push)

Sau đó ta sẽ tiến hành đẩy source code của login_app lên github :

minhduc@minhduc-K42F:~/login_app$ git checkout -b master
Switched to a new branch 'master'
minhduc@minhduc-K42F:~/login_app$ git add -A
minhduc@minhduc-K42F:~/login_app$ git commit -m "push source login_app to github"
[master (root-commit) ee5c188] push source login_app to github
 95 files changed, 1431 insertions(+)
minhduc@minhduc-K42F:~/login_app$ git push origin master 
Username for 'https://github.com': duc11t3bk
Password for 'https://duc11t3bk@github.com': 
Counting objects: 108, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (95/95), done.
Writing objects: 100% (108/108), 24.58 KiB | 0 bytes/s, done.
Total 108 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), done.
To https://github.com/duc11t3bk/login_app.git
 * [new branch]      master -> master
minhduc@minhduc-K42F:~/login_app$ git branch
* master
minhduc@minhduc-K42F:~/login_app$

Sau đó chúng ta mở lại trang Github để kiểm tra OK như vậy là source code của chúng ta đã được đẩy lên Github (y) Từ bây giờ các bạn có thể thực hiện Pull, Push, Commit source code của mình lên đây việc quản lý source code của các bạn sẽ dễ dàng hơn rất nhiều.

Deploy app on Heroku

Chúng ta đã biết cách quản lý source code bằng Git. Bây giờ chúng ta sẽ deploy app lên heroku nhé

Cài đặt Heroku

Các bạn làm theo hướng dẫn cài đặt Heroku ở đây nhé https://devcenter.heroku.com/articles/heroku-cli#windows-bash-and-ubuntu-debian Để kiểm tra đã cài đặt heroku thành công

minhduc@minhduc-K42F:~/login_app$ heroku --version
heroku-toolbelt/3.43.7 (x86_64-linux) ruby/2.3.1
heroku-cli/5.9.0-1b8deac (linux-amd64) go1.7.5

Các bạn cần tạo cho mình một tài khoản Heroku tại đây Sau đó login tài khoản Heroku vừa tạo ở local

minhduc@minhduc-K42F:~/login_app$ heroku login
Enter your Heroku credentials:
Email: hoang.cong.minh.duc@framgia.com
Password: *************
Logged in as hoang.cong.minh.duc@framgia.com

Khởi tạo Heroku app

minhduc@minhduc-K42F:~/login_app$ heroku create
Creating app... done, ⬢ guarded-garden-53092
https://guarded-garden-53092.herokuapp.com/ | https://git.heroku.com/guarded-garden-53092.git

Vì Heroku sử dụng Postgresql cho Rails nên ta cần add thêm 2 gems bên dưới vào gemfile

group :production do
  gem "pg",             "~> 0.18"
  gem "rails_12factor", "0.0.2"
end

Sau đó chạy lại bundle

bundle install --without production

Deploy app lên Heroku

minhduc@minhduc-K42F:~/login_app$ git add -A
minhduc@minhduc-K42F:~/login_app$ git commit --amend
minhduc@minhduc-K42F:~/login_app$ git push heroku master -f
...
remote: -----> Compressing...
remote:        Done: 38.6M
remote: -----> Launching...
remote:        Released v5
remote:        https://guarded-garden-53092.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/guarded-garden-53092.git
 * [new branch]      master -> master

Tạo DB trên Heroku

minhduc@minhduc-K42F:~/login_app$ heroku rake db:migrate
Running rake db:migrate on ⬢ guarded-garden-53092... up, run.4341 (Free)
   (18.5ms)  CREATE TABLE "schema_migrations" ("version" character varying PRIMARY KEY)
   (12.0ms)  CREATE TABLE "ar_internal_metadata" ("key" character varying PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
   (1.4ms)  SELECT pg_try_advisory_lock(1203586850511608010);
  ActiveRecord::SchemaMigration Load (1.4ms)  SELECT "schema_migrations".* FROM "schema_migrations"
...

  SQL (7.0ms)  INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"  [["key", "environment"], ["value", "production"], ["created_at", 2017-05-02 16:08:06 UTC], ["updated_at", 2017-05-02 16:08:06 UTC]]
   (2.4ms)  COMMIT
   (1.2ms)  SELECT pg_advisory_unlock(1203586850511608010)
minhduc@minhduc-K42F:~/login_app$ 

Như vậy việc deploy lên Heroku đã xong chúng ta thử truy cập vào link mà Heroku đã tạo sẵn cho login_app nhé, của mình là như bên dưới, còn của các bạn thì các bạn cần phải kéo lên lúc dùng lệnh heroku create link này sẽ được hiện ngay phía bên dưới hoặc các bạn có thể vào trang Heroku https://dashboard.heroku.com/apps để mở app của mình https://guarded-garden-53092.herokuapp.com/login Phần này mình đã hướng dẫn các bạn deploy app của mình lên Heroku thành công, cám ơn các bạn đã theo dõi phần tiếp theo mình sẽ hướng dẫn các kỹ thuật cơ bản của Rails nested_attributes, association has_many, has_one, belongs_to,...

Nguồn

http://3rd-edition.railstutorial.org/book/beginning https://thachpham.com/tools/git-git-va-github-la-gi-tai-sao-nen-dung.html


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í