Reading Time: 8 minutes

Khi sử dụng framework web Ruby on Rails, mặc định, ứng dụng của bạn sẽ được cấu hình để sử dụng SQLite làm cơ sở dữ liệu. SQLite là một cơ sở dữ liệu quan hệ nhẹ, di động và dễ sử dụng, hoạt động tốt trong môi trường ít bộ nhớ, và thực sự phù hợp với nhiều trường hợp, đặc biệt là khi bắt đầu một dự án nhỏ hoặc để phát triển cục bộ.

PostgreSQL với ruby on Rails trên Ubuntu 18.04

Tuy nhiên, đối với các ứng dụng phức tạp hơn, đòi hỏi tính toàn vẹn dữ liệu cao, hiệu suất xử lý lớn và khả năng mở rộng lập trình mạnh mẽ, PostgreSQL sẽ là một lựa chọn mạnh mẽ và linh hoạt hơn nhiều.

Trong bài blog này, tôi sẽ hướng dẫn bạn cách thiết lập một môi trường phát triển Ruby on Rails kết nối với cơ sở dữ liệu PostgreSQL trên máy chủ Ubuntu 18.04. Chúng ta sẽ cùng cài đặt và cấu hình PostgreSQL, sau đó kiểm tra thiết lập bằng cách tạo một ứng dụng Rails sử dụng PostgreSQL làm máy chủ cơ sở dữ liệu .

Yêu cầu trước khi bắt đầu

Để thực hiện theo hướng dẫn này, bạn sẽ cần chuẩn bị các yếu tố sau:

  • Một máy chủ Ubuntu 18.04 bao gồm một người dùng non-root có quyền sudo và một tường lửa (firewall).
  • Một môi trường phát triển Ruby on Rails đã được cài đặt trên máy chủ Ubuntu 18.04 của bạn.

Bước 1 – Cài đặt PostgreSQL

Để cấu hình Ruby on Rails tạo ứng dụng web của bạn với PostgreSQL làm cơ sở dữ liệu, trước tiên chúng ta sẽ cài đặt cơ sở dữ liệu này lên máy chủ của bạn.

Sử dụng quyền sudo, hãy cập nhật chỉ mục gói APT của bạn để đảm bảo các kho lưu trữ của bạn được cập nhật:

sudo apt update

Tiếp theo, cài đặt PostgreSQL và các thư viện phát triển của nó:

sudo apt install postgresql postgresql-contrib libpq-dev

Trong lệnh trên, gói postgresql chứa chương trình PostgreSQL chính, trong khi postgresql-contrib bổ sung một số tính năng mở rộng khả năng của PostgreSQL. libpq-dev là một thư viện PostgreSQL cho phép các client gửi truy vấn và nhận phản hồi từ máy chủ back-end, từ đó cho phép ứng dụng của bạn giao tiếp với cơ sở dữ liệu của nó.

Sau khi PostgreSQL và các phụ thuộc của nó đã được cài đặt, bước tiếp theo là tạo một vai trò (role) mà ứng dụng Rails của bạn sẽ sử dụng sau này để tạo cơ sở dữ liệu.

Bước 2 – Tạo một vai trò cơ sở dữ liệu mới (Database Role)

Trong PostgreSQL, các role (vai trò) có thể được sử dụng tương tự như người dùng (users) trong Linux để tổ chức quyền và phân quyền. Bước này sẽ chỉ cho bạn cách tạo một vai trò superuser mới cho tên người dùng Ubuntu của bạn, cho phép bạn hoạt động trong hệ thống PostgreSQL để tạo và cấu hình cơ sở dữ liệu.

Để tạo một vai trò superuser PostgreSQL, hãy sử dụng lệnh sau, thay thế từ được tô sáng bằng tên người dùng Ubuntu 18.04 của bạn:

sudo -u postgres createuser -s sammy -P

Vì bạn đã chỉ định cờ -P, bạn sẽ được nhắc nhập mật khẩu cho vai trò mới của mình. Nhập mật khẩu mong muốn của bạn, đảm bảo ghi lại nó để bạn có thể sử dụng nó trong một file cấu hình ở bước sau.

Trong lệnh này, bạn đã sử dụng createuser để tạo một vai trò có tên sammy. Cờ -s cấp cho người dùng này quyền superuser, và sudo -u cho phép bạn chạy lệnh từ tài khoản postgres được tự động tạo khi cài đặt PostgreSQL.

Lưu ý: Vì chế độ xác thực cho PostgreSQL trên Ubuntu 18.04 bắt đầu là ident, theo mặc định, một người dùng Ubuntu chỉ có thể hoạt động trong PostgreSQL với một vai trò có cùng tên. Để biết thêm thông tin, hãy kiểm tra tài liệu chính thức của PostgreSQL về xác thực.

Nếu bạn không sử dụng cờ -P và muốn đặt mật khẩu cho vai trò sau khi tạo, hãy vào console PostgreSQL với lệnh sau:

sudo -u postgres psql

Bạn sẽ nhận được kết quả như sau, cùng với dấu nhắc cho console PostgreSQL:

Output
psql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1))
Type "help" for help.

postgres=#

Console PostgreSQL được chỉ ra bởi dấu nhắc postgres=#. Tại dấu nhắc PostgreSQL, nhập lệnh này để đặt mật khẩu cho vai trò cơ sở dữ liệu mới, thay thế tên được tô sáng bằng tên bạn đã tạo:

\\\\password sammy

PostgreSQL sẽ nhắc bạn nhập mật khẩu. Nhập mật khẩu mong muốn của bạn tại dấu nhắc, sau đó xác nhận lại.

Bây giờ, thoát console PostgreSQL bằng cách nhập lệnh này:

\\\\q

Dấu nhắc thông thường của bạn sẽ xuất hiện lại.

Trong bước này, bạn đã tạo một vai trò PostgreSQL mới với quyền superuser. Bây giờ bạn đã sẵn sàng tạo một ứng dụng Rails mới sử dụng vai trò này để tạo cơ sở dữ liệu.

Bước 3 – Tạo một ưng dụng Rails mới

Với một role đã được cấu hình cho PostgreSQL, giờ đây bạn có thể tạo một ứng dụng Rails mới được thiết lập để sử dụng PostgreSQL làm cơ sở dữ liệu.

Đầu tiên, điều hướng đến thư mục home của bạn:

cd ~

Tạo một ứng dụng Rails mới trong thư mục này, thay thế appname bằng tên bạn muốn đặt cho ứng dụng của mình:

rails new appname -d=postgresql

Tùy chọn -d=postgresql thiết lập PostgreSQL làm cơ sở dữ liệu.

Sau khi bạn đã chạy lệnh này, một thư mục mới có tên appname sẽ xuất hiện trong thư mục home của bạn, chứa tất cả các yếu tố của một ứng dụng Rails cơ bản.

Tiếp theo, di chuyển vào thư mục của ứng dụng:

cd appname

Bây giờ bạn đã tạo một ứng dụng Rails mới và đã di chuyển vào thư mục gốc của dự án, bạn có thể cấu hình và tạo cơ sở dữ liệu PostgreSQL từ bên trong ứng dụng Rails của mình.

Bước 4 – Cấu hình và tạo cơ sở dữ liệu của bạn (Configuring and Creating Your Database)

Khi tạo các cơ sở dữ liệu developmenttest cho ứng dụng của bạn, Rails sẽ sử dụng vai trò PostgreSQL mà bạn đã tạo cho tên người dùng Ubuntu của mình. Để đảm bảo Rails tạo các cơ sở dữ liệu này, bạn sẽ thay đổi file cấu hình cơ sở dữ liệu của dự án. Sau đó, bạn sẽ tạo các cơ sở dữ liệu của mình.

Một trong những thay đổi cấu hình cần thực hiện trong ứng dụng Rails của bạn là thêm mật khẩu cho vai trò PostgreSQL bạn đã tạo ở bước trước. Để giữ thông tin nhạy cảm như mật khẩu an toàn, việc lưu trữ chúng trong một biến môi trường (environment variable) thay vì viết trực tiếp vào file cấu hình là một ý tưởng tốt.

Để lưu trữ mật khẩu của bạn trong một biến môi trường khi đăng nhập, hãy chạy lệnh sau, thay thế APPNAME bằng tên ứng dụng của bạn và PostgreSQL_Role_Password bằng mật khẩu bạn đã tạo ở bước trước:

echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc

Lệnh này ghi lệnh export vào file ~/.bashrc của bạn để biến môi trường sẽ được đặt khi đăng nhập.

Để xuất biến cho phiên hiện tại của bạn, hãy sử dụng lệnh source:

source ~/.bashrc

Bây giờ bạn đã lưu mật khẩu của mình vào môi trường, đã đến lúc thay đổi file cấu hình.

Mở file cấu hình cơ sở dữ liệu của ứng dụng của bạn trong trình soạn thảo văn bản ưa thích của bạn. Bài hướng dẫn này sẽ sử dụng nano:

nano config/database.yml

Dưới phần default, tìm dòng pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> và thêm các dòng được tô sáng sau, điền thông tin xác thực của bạn và biến môi trường bạn đã tạo. Nó sẽ trông giống như thế này:

...
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # <http://guides.rubyonrails.org/configuring.html#database-pooling>
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: sammy
  password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: appname_development
...

Điều này sẽ làm cho ứng dụng Rails chạy cơ sở dữ liệu với vai trò và mật khẩu chính xác. Lưu và thoát bằng cách nhấn CTRL+x, Y, sau đó ENTER.

Để biết thêm thông tin về cấu hình cơ sở dữ liệu trong Rails, hãy xem tài liệu Rails.

Bây giờ bạn đã thực hiện các thay đổi đối với config/database.yml, hãy tạo các cơ sở dữ liệu của ứng dụng bằng cách sử dụng lệnh rails:

rails db:create

Sau khi Rails tạo cơ sở dữ liệu, bạn sẽ nhận được kết quả như sau:

Output
Created database 'appname_development'
Created database 'appname_test'

Như kết quả đầu ra cho thấy, lệnh này đã tạo một cơ sở dữ liệu developmenttest trong máy chủ PostgreSQL của bạn.

Bây giờ bạn đã có một cơ sở dữ liệu PostgreSQL được kết nối với ứng dụng Rails của mình. Để đảm bảo rằng ứng dụng của bạn đang hoạt động, bước tiếp theo là kiểm tra cấu hình của bạn.

Bước 5 – Kiểm tra cấu hình của bạn

Để kiểm tra xem ứng dụng của bạn có thể sử dụng cơ sở dữ liệu PostgreSQL hay không, hãy thử chạy ứng dụng web của bạn để nó sẽ hiển thị trong trình duyệt.

Sử dụng lệnh rails server, hãy chạy ứng dụng web của bạn trên máy chủ web tích hợp sẵn trong ứng dụng Rails của bạn.

rails server --binding=127.0.0.1

Cờ --binding liên kết ứng dụng của bạn với một địa chỉ IP được chỉ định. Theo mặc định, cờ này sẽ liên kết Rails với 0.0.0.0, nhưng vì điều này có nghĩa là Rails sẽ lắng nghe tất cả các interface, việc sử dụng 127.0.0.1 để chỉ định localhost sẽ an toàn hơn. Theo mặc định, ứng dụng lắng nghe trên cổng 3000.

Khi ứng dụng Rails của bạn đang chạy, dấu nhắc lệnh của bạn sẽ biến mất, được thay thế bằng kết quả này:

Output
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop

Để kiểm tra xem ứng dụng của bạn có đang chạy không, hãy mở một cửa sổ terminal mới trên máy chủ của bạn và sử dụng lệnh curl để gửi yêu cầu đến 127.0.0.1:3000:

curl <http://127.0.0.1:3000>

Bạn sẽ nhận được rất nhiều kết quả đầu ra bằng HTML, kết thúc bằng một cái gì đó như:

Output
...
        <strong>Rails version:</strong> 5.2.3<br />
        <strong>Ruby version:</strong> 2.6.3 (x86_64-linux)
      </p>
    </section>
  </div>
</body>
</html>

Nếu ứng dụng Rails của bạn đang chạy trên một máy chủ từ xa và bạn muốn truy cập nó thông qua trình duyệt web, một cách dễ dàng là liên kết nó với địa chỉ IP công cộng của máy chủ của bạn. Đầu tiên, mở cổng 3000 trong tường lửa của bạn:

sudo ufw allow 3000

Tiếp theo, tra cứu địa chỉ IP công cộng của máy chủ của bạn. Bạn có thể làm điều này bằng cách chạy lệnh curl sau:

curl <http://icanhazip.com>

Điều này sẽ trả về địa chỉ IP công cộng của bạn. Sử dụng nó với lệnh rails server, thay thế server_public_IP bằng IP công cộng của máy chủ của bạn:

rails server --binding=server_public_IP

Bây giờ bạn sẽ có thể truy cập ứng dụng Rails của mình trong trình duyệt web cục bộ thông qua địa chỉ IP công cộng của máy chủ trên cổng 3000 bằng cách truy cập:

http://server_public_IP:3000

Tại URL này, bạn sẽ tìm thấy trang chào mừng của Ruby on Rails. Điều này có nghĩa là ứng dụng của bạn đã được cấu hình đúng và kết nối với cơ sở dữ liệu PostgreSQL.

Sau khi kiểm tra cấu hình, nếu bạn muốn đóng cổng 3000, hãy sử dụng lệnh sau.

sudo ufw delete allow 3000

Kết luận

Trong bài blog này, chúng ta đã cùng nhau xây dựng một ứng dụng web Ruby on Rails được cấu hình để sử dụng PostgreSQL làm cơ sở dữ liệu trên máy chủ Ubuntu 18.04. Chúng ta đã đi qua các bước quan trọng từ việc cài đặt PostgreSQL, tạo vai trò người dùng, cho đến việc tạo ứng dụng Rails và cấu hình nó để kết nối với cơ sở dữ liệu mạnh mẽ này. Việc sử dụng PostgreSQL thay vì SQLite mang lại sự ổn định, khả năng mở rộng và các tính năng nâng cao cần thiết cho các ứng dụng thực tế, đặc biệt là trong môi trường production.

Hy vọng hướng dẫn này sẽ giúp bạn tự tin hơn khi triển khai các dự án Rails sử dụng PostgreSQL.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất