0

Cách Thiết Lập Nhanh Môi Trường Phát Triển Rails

Để biết phương pháp nhanh hơn, xem phần cuối của bài viết.

Cách Tiếp Cận

Đầu tiên, khởi động một container Ruby tạm thời để tạo dự án, sau đó xây dựng image phát triển cần thiết.

Image description

Tạo Dự Án Mới

Để tạo một dự án Rails, khởi động một container Ruby tạm thời:

$ docker run -it -v $(pwd):/app -w /app ruby:3.2 bash

Cài đặt gem Rails bên trong container:

/app# gem install rails

Sau đó tạo dự án:

/app# rails new myapp --database=postgresql --css=sass --skip-bundle

Ở đây, chúng ta sử dụng tham số --skip-bundle vì đây chỉ là một container tạm thời. Chúng ta sẽ chạy bundle trong container phát triển sau. Bây giờ, container tạm thời đã hoàn thành nhiệm vụ của mình. Thoát khỏi container bằng cách nhấn ctrl-d hoặc gõ exit.

Thêm Dockerfile

Thêm một Dockerfile trong thư mục dự án với nội dung sau:

FROM ruby:3.2

# Đặt lại biến môi trường này do image Ruby đặt thành giá trị mặc định của nó
ENV BUNDLE_APP_CONFIG=.bundle

# Bỏ chú thích phần này nếu bạn cần cài đặt các phụ thuộc khác
# RUN apt-get update && apt-get install -y --no-install-recommends \
#    nodejs \
#    npm \
#    postgresql-client

WORKDIR /app

Đây là một image môi trường phát triển Rails tối thiểu. Nếu cần, bạn có thể cài đặt các phụ thuộc hệ thống khác bằng cách sử dụng apt-get. Chúng ta không cần xây dựng image ngay bây giờ; chúng ta sẽ xây dựng nó sau bằng cách sử dụng lệnh docker compose.

Thêm docker-compose.yml

Thêm một tệp docker-compose.yml trong thư mục dự án với nội dung sau:

version: "3.9"

services:
  web:
    build: .
    command: bin/rails server -b 0.0.0.0
    volumes:
      - .:/app
    ports:
      - 3000:3000
    depends_on:
      - postgres
  postgres:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: postgres

Điều này định nghĩa các dịch vụ webpostgres. Dịch vụ web sẽ xây dựng một image dựa trên Dockerfile trong thư mục hiện tại, gắn thư mục hiện tại vào thư mục /app bên trong container, mở cổng 3000 và thêm một phụ thuộc vào dịch vụ postgres. Dịch vụ postgres sẽ sử dụng image postgres và đặt mật khẩu ban đầu qua biến môi trường.

Xây Dựng Image

Chạy lệnh sau:

$ docker compose build

Docker Compose sẽ đọc cấu hình trong docker-compose.yml và xây dựng các image tương ứng. Lưu ý: bạn cần chạy lại lệnh này mỗi khi bạn chỉnh sửa Dockerfile.

Vào Dòng Lệnh

Chạy lệnh sau:

$ docker compose run web bash

Điều này sẽ khởi động container dịch vụ web và mở một shell bash. Trong shell này, bạn có thể chạy các lệnh cần thiết cho phát triển địa phương, chẳng hạn như bundle install, bin/rails g, v.v. Tất cả các thao tác tiếp theo cần được thực hiện bên trong container sẽ được thực hiện thông qua shell này.

Chạy Bundle

Đầu tiên, chạy lệnh sau bên trong container:

/app# bundle config set --local path vendor/bundle

Lệnh này đặt thư mục cài đặt bundle vào thư mục vendor/bundle dưới dự án. Bằng cách này, mỗi khi bạn cập nhật Gemfile trong quá trình phát triển, bạn sẽ không cần xây dựng lại image.

Sau đó chạy bundle:

/app# bundle install

Lưu ý: nhớ thêm vendor/bundle vào .gitignore.

Chuẩn Bị Cơ Sở Dữ Liệu

Trước khi tạo cơ sở dữ liệu, hãy chỉnh sửa cài đặt cơ sở dữ liệu của dự án Rails. Trong môi trường Docker Compose, PostgreSQL và quy trình Rails chạy trong các container khác nhau, tương tự như các máy chủ khác nhau, nơi tên dịch vụ là tên mạng tương ứng của chúng.

Chỉnh sửa database.yml để thêm nội dung sau vào các phần developmenttest:

  host: postgres
  username: postgres
  password: postgres

Sau đó chạy lệnh sau:

/app# bin/setup

Điều này sẽ tạo cơ sở dữ liệu tương ứng.

Khởi Động Dịch Vụ Web

Sau khi chuẩn bị, đã đến lúc khởi động dịch vụ web. Mở một terminal khác và chạy lệnh sau:

$ docker compose up

Khi khởi động hoàn tất, mở http://localhost:3000 để xem trang chào mừng của Rails.

Cách Đơn Giản Hơn

Tải xuống ServBay ServBay là một công cụ quản lý môi trường phát triển tất cả trong một hỗ trợ nhiều ngôn ngữ phát triển và các thành phần cơ sở dữ liệu, bao gồm PHP, Node.js, MariaDB (MySQL), PostgreSQL, cũng như các cơ sở dữ liệu NoSQL như Redis và Memcached.

Để thiết lập một môi trường Redis, chỉ cần tải xuống gói Redis trong ServBay và tất cả các cấu hình sẽ được hoàn thành trong vòng 3 phút.


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í