Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 18.04
Khi sử dụng khuôn khổ web Ruby on Rails , ứng dụng của bạn được cài đặt theo mặc định để sử dụng SQLite làm database . SQLite là một database quan hệ nhẹ, di động và thân thiện với user , hoạt động đặc biệt tốt trong môi trường bộ nhớ thấp và sẽ hoạt động tốt trong nhiều trường hợp. Tuy nhiên, đối với các ứng dụng phức tạp cần tính toàn vẹn dữ liệu tin cậy hơn và khả năng mở rộng theo chương trình, database PostgreSQL sẽ là lựa chọn linh hoạt và mạnh mẽ hơn. Để cấu hình cài đặt Ruby on Rails của bạn để sử dụng PostgreSQL, bạn cần thực hiện một số bước bổ sung để cài đặt và chạy nó.Trong hướng dẫn này, bạn sẽ cài đặt môi trường phát triển Ruby on Rails được kết nối với database PostgreSQL trên server Ubuntu 18.04. Bạn sẽ cài đặt và cấu hình PostgreSQL, sau đó kiểm tra cài đặt của bạn bằng cách tạo một ứng dụng Rails sử dụng PostgreSQL làm server database của nó.
Yêu cầu
Hướng dẫn này yêu cầu những điều sau:
Server Ubuntu 18.04 được cài đặt theo Hướng dẫn cài đặt server ban đầu cho Ubuntu 18.04 , bao gồm user không phải root có quyền sudo và firewall .
Môi trường phát triển Ruby on Rails được cài đặt trên server Ubuntu 18.04 của bạn. Để cài đặt điều này, hãy làm theo hướng dẫn của ta về Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04 . Hướng dẫn này sẽ sử dụng version 2.6.3 của Ruby và 5.2.3 của Rails; để biết thông tin về các version mới nhất, hãy xem các trang web chính thức của Ruby và Rails .
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 database , trước tiên bạn sẽ cài đặt database vào server của bạn .
Sử dụng quyền sudo
, hãy cập nhật index gói APT của bạn đảm bảo rằng repository 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ước, gói postgresql
giữ chương trình PostgreSQL chính, trong khi postgresql-contrib
bổ sung một số tính năng PostgreSQL để mở rộng khả năng của nó. libpq-dev
là một thư viện PostgreSQL cho phép khách hàng gửi các truy vấn và nhận phản hồi từ server back-end, cho phép ứng dụng của bạn giao tiếp với database 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 role mà ứng dụng Rails của bạn sẽ sử dụng sau này để tạo database của bạn.
Bước 2 - Tạo role database mới
Trong PostgreSQL, các role được dùng giống như user trong Linux để tổ chức các quyền và phân quyền. Bước này sẽ chỉ cho bạn cách tạo một role siêu user mới cho tên user Linux của bạn, role này sẽ cho phép bạn hoạt động trong hệ thống PostgreSQL để tạo và cấu hình database .
Để tạo role siêu user PostgreSQL, hãy sử dụng lệnh sau, thay thế từ được đánh dấu bằng tên user 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 yêu cầu nhập password cho role mới của bạn . Nhập password mong muốn của bạn, đảm bảo ghi lại password đó để bạn có thể sử dụng password đó trong file cấu hình trong bước sau.
Trong lệnh này, bạn sử dụng createuser
để tạo ra một role tên là sammy
. -s
đã cấp cho user này các quyền siêu user và sudo -u
cho phép bạn chạy lệnh từ account postgres
được tạo tự động khi cài đặt PostgreSQL.
Lưu ý: Vì chế độ xác thực cho PostgreSQL trên Ubuntu 18.04 bắt đầu dưới ident
, theo mặc định, user Ubuntu chỉ có thể hoạt động trong PostgreSQL với role cùng tên. Để biết thêm thông tin, hãy xem 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 password cho role sau khi tạo, hãy nhập console PostgreSQL bằng lệnh sau:
- sudo -u postgres psql
Bạn sẽ nhận được kết quả sau, cùng với dấu nhắc cho console PostgreSQL:
Outputpsql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1)) Type "help" for help. postgres=#
Control panel PostgreSQL được biểu thị bằng dấu nhắc postgres=#
. Tại dấu nhắc PostgreSQL, nhập lệnh này để đặt password cho role database mới, thay thế tên được đánh dấu bằng tên bạn đã tạo:
- \password sammy
PostgreSQL sẽ nhắc bạn nhập password . Nhập password mong muốn của bạn tại dấu nhắc , sau đó xác nhận.
Bây giờ, thoát khỏi console PostgreSQL bằng lệnh lệnh sau:
- \q
Dấu nhắc thông thường của bạn bây giờ sẽ xuất hiện lại.
Trong bước này, bạn đã tạo một role PostgreSQL mới với các quyền user cấp cao. Đến đây bạn đã sẵn sàng tạo một ứng dụng Rails mới sử dụng role này để tạo database .
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, bây giờ bạn có thể tạo một ứng dụng Rails mới được cài đặt để sử dụng PostgreSQL làm database .
Đầu tiên, chuyển đến folder chính của bạn:
- cd ~
Tạo một ứng dụng Rails mới trong folder này, thay cho appname
với bất cứ điều gì bạn muốn gọi ứng dụng của bạn:
- rails new appname -d=postgresql
Tùy chọn -d=postgresql
đặt PostgreSQL làm database .
Khi bạn đã chạy lệnh này, một folder mới có tên appname
sẽ xuất hiện trong folder chính của bạn, chứa tất cả các phần tử của một ứng dụng Rails cơ bản.
Tiếp theo, chuyển vào folder của ứng dụng:
- cd appname
Đến đây bạn đã tạo một ứng dụng Rails mới và đã chuyển vào folder root cho dự án của bạn , bạn có thể cấu hình và tạo database PostgreSQL từ bên trong ứng dụng Rails của bạn .
Bước 4 - Cấu hình và tạo database của bạn
Khi tạo database development
và test
cho ứng dụng của bạn, Rails sẽ sử dụng role PostgreSQL mà bạn đã tạo cho tên user Ubuntu của bạn . Để đảm bảo Rails tạo các database này, bạn sẽ thay đổi file cấu hình database của dự án của bạn . Sau đó, bạn sẽ tạo database của bạn .
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 password cho role PostgreSQL mà bạn đã tạo ở bước cuối cùng. Để giữ an toàn thông tin nhạy cảm như password , bạn nên lưu trữ thông tin này trong một biến môi trường thay vì ghi trực tiếp vào file cấu hình của bạn.
Để lưu trữ password 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 password bạn đã tạo ở bước cuối cùng:
- 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
Đến đây bạn đã lưu trữ password của bạn trong môi trường của bạn , đã đến lúc thay đổi file cấu hình.
Mở file cấu hình database của ứng dụng trong editor bạn muốn . Hướng dẫn này sẽ sử dụng nano
:
- nano config/database.yml
Trong phần default
, hãy tìm dòng có nội dung pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
và thêm các dòng được đánh dấu sau, điền thông tin đăng nhập của bạn và biến môi trường bạn đã tạo. Nó trông giống như sau :
... 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 database với role và password 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 database trong Rails, hãy xem tài liệu Rails .
Đến đây bạn đã áp dụng các thay đổi đối với config/database.yml
, hãy tạo config/database.yml
cho ứng dụng của bạn bằng cách sử dụng lệnh rails
:
- rails db:create
Khi Rails tạo database , bạn sẽ nhận được kết quả sau:
OutputCreated database 'appname_development' Created database 'appname_test'
Như kết quả gợi ý, lệnh này đã tạo database development
và test
trong server PostgreSQL của bạn.
Đến đây bạn có một database PostgreSQL được kết nối với ứng dụng Rails của bạn. Để đảm bảo ứ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 database PostgreSQL hay không, hãy thử chạy ứng dụng web của bạn để ứng dụng này hiển thị trong trình duyệt.
Sử dụng lệnh rails server
, chạy ứng dụng web của bạn trên web server được tích hợp sẵn trong ứng dụng Rails của bạn, Puma :
- rails server --binding=127.0.0.1
--binding
liên kết ứng dụng của bạn với một IP được chỉ định. Theo mặc định, cờ này sẽ ràng buộc Rails với 0.0.0.0
, nhưng vì điều này nghĩa là Rails sẽ lắng nghe tất cả các giao diện, nên sẽ an toàn hơn khi sử dụng 127.0.0.1
để chỉ định localhost
. Theo mặc định, ứng dụng sẽ 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ẽ không xuất hiện , đượ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 hay không, hãy mở cửa sổ terminal mới trên server 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ả trong HTML, kết thúc bằng thông tin 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 nằm trên một server 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 server của bạn. Đầu tiên, mở cổng 3000
trong firewall của bạn:
- sudo ufw allow 3000
Tiếp theo, tra cứu địa chỉ IP công cộng của server của bạn. Bạn có thể thực hiện việc này bằng cách chạy lệnh curl
sau:
- curl http://icanhazip.com
Kết quả 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 khai của server của bạn:
- rails server --binding=server_public_IP
Như vậy, bạn có thể truy cập ứng dụng Rails của bạn trong trình duyệt web local thông qua địa chỉ IP công cộng của server 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 nghĩa là ứng dụng của bạn được cấu hình đúng cách và được kết nối với database 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 hướng dẫn này, bạn đã tạo một ứng dụng web Ruby on Rails được cấu hình để sử dụng PostgreSQL làm database trên server Ubuntu 18.04. Nếu bạn muốn tìm hiểu thêm về ngôn ngữ lập trình Ruby, hãy xem loạt bài Cách viết mã trong Ruby của ta .
Để biết thêm thông tin về việc chọn database cho ứng dụng của bạn, hãy xem hướng dẫn của ta về sự khác biệt giữa và các trường hợp sử dụng của SQLite, PostgreSQL và MySQL . Nếu bạn muốn đọc thêm về cách sử dụng database , hãy xem bài viết Giới thiệu về truy vấn trong PostgreSQL của ta hoặc khám phá sản phẩm Dịch vụ database của DigitalOcean.
Các tin liên quan
Cách kiểm tra database PostgreSQL với InSpec trên Ubuntu 18.042019-04-02
Công cụ kết nối dịch vụ database và đo điểm chuẩn PostgreSQL bằng pgbench
2019-02-14
Giới thiệu về Truy vấn trong PostgreSQL
2018-10-17
Cách thiết lập bản sao lôgic với PostgreSQL 10 trên Ubuntu 18.04
2018-08-31
Cách di chuyển thư mục dữ liệu PostgreSQL đến vị trí mới trên Ubuntu 18.04
2018-07-13
Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 18.04
2018-05-04
Cách sử dụng tìm kiếm toàn văn bản trong PostgreSQL trên Ubuntu 16.04
2017-06-15
Cách bảo mật PostgreSQL chống lại các cuộc tấn công tự động
2017-01-24
Cách sử dụng Postgresql với Ứng dụng Django của bạn trên Debian 8
2016-12-22
Cách di chuyển thư mục dữ liệu PostgreSQL đến vị trí mới trên Ubuntu 16.04
2016-07-27