Docker로 Rails6+MySQL 개발 환경 구축

12099 단어 Railstech
몇 번 굽는지는 모르지만 Docker로 Rails의 개발 환경을 구축하는 절차를 남겨두세요.
  • Rails 6.0.3.4
  • MySQL 8.0.20
  • Ruby 2.7.2
  • 필요한 파일/디렉토리 준비


    touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,.env}
    
    % tree -L 1
    .
    ├── Dockerfile
    ├── Gemfile
    ├── Gemfile.lock
    ├── docker-compose.yml
    
    Dockerfile
    FROM ruby:2.7.2
    
    ENV LANG C.UTF-8
    ENV APP_ROOT /app
    
    WORKDIR /app
    
    RUN apt-get update \
      && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
      && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
      && apt-get update -qq \
      && apt-get install -y nodejs yarn \
      && apt-get install -y sqlite3 \
      && apt-get install -y libsqlite3-dev \
      && apt-get install -y vim \
      && apt-get clean  \
    # Capybaraでテストするために必要なものをインストール
    # 署名を追加(chromeのインストールに必要) -> apt-getでchromeと依存ライブラリをインストール
      && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add \
      && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | tee /etc/apt/sources.list.d/google-chrome.list \
      && apt-get update -qq \
      && apt-get install -y google-chrome-stable libnss3 libgconf-2-4 \
      && CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` \
      && curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip \
      && unzip /tmp/chromedriver_linux64.zip \
      && mv chromedriver /usr/local/bin/ \
    # Ruby-2.7以降だと`gem install bundler`しないとエラーが発生する
      && gem install bundler
    
    RUN mkdir -p $APP_ROOT
    WORKDIR $APP_ROOT
    
    COPY Gemfile $APP_ROOT/Gemfile
    COPY Gemfile.lock $APP_ROOT/Gemfile.lock
    RUN bundle update --bundler \
    && bundle install  --jobs 4 --retry 3
    
    docker-compose.yml
    version: '3'
    services:
      db:
        image: mysql:8.0.20
        volumes:
          - ./tmp/db:/var/lib/mysql
        ports:
          - '3306:3306'
        command: --default-authentication-plugin=mysql_native_password
        env_file: .env
    
      web:
        build: .
        command: /bin/sh
        env_file: .env
        environment:
          WEBPACKER_DEV_SERVER_HOST: "0.0.0.0"
          RAILS_SERVE_STATIC_FILES: "1"
          EDITOR: "vim"
        volumes:
          - ./app:/app:cached
        ports:
          - "3000:3000"
        depends_on:
          - db
        tty: true
    
    .env
    MYSQL_ROOT_PASSWORD=password
    TZ=Japan
    
    Gemfile
    source 'https://rubygems.org'
    ruby '2.7.2'
    
    gem 'rails', '6.0.3.4'
    
    Gemfile.lock
    # Gemfile.lockは空
    

    이미지 만들기


    첫 번째 터미널에서 다음 명령을 실행합니다:.
    $ docker-compose build --no-cache
    $ docker-compose up
    

    Rails 프로젝트 작성


    다른 터미널에서 다음을 수행합니다.
    $ docker-compose exec web bash
    /app# rails -v
    Rails 6.0.3.4
    /app# rails new . --force --database=mysql --skip-turbolinks --skip-test
    /app# bin/rails webpacker:install
    
  • --skip-test:test를 만들지 않습니다.--skip-test-unit와 동일
  • --force: 파일이 있더라도 덮어쓰기
  • database.yml 편집
    config/database.yml
    default: &default
      adapter: mysql2
      encoding: utf8mb4
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: <%= ENV.fetch('MYSQL_USERNAME') { 'root' } %>
      password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %>
      host: <%= ENV.fetch('MYSQL_HOST') { 'db' } %>
    
    development:
      <<: *default
      database: app_development
    
    test:
      <<: *default
      database: app_test
    
    production:
      <<: *default
      database: app_production
      username: app
      password: <%= ENV['APP_DATABASE_PASSWORD'] %>
    
    데이터베이스를 만듭니다.
    /app# bin/rails db:create
    /app# bin/rails db:migrate
    
    서버를 시작합니다.
    /app# bin/rails s -b 0.0.0.0
    
    브라우저에서 http://localhost:3000/ 를 엽니다.

    정부의 방법은 아래와 같다.
    시작 코드: Compose 및 Rails

    RSpec 설치


    Gemfile 및 rspec 및 factorybot의gem를 추가합니다.
    Gemfile
    group :development, :test do
      # Call 'byebug' anywhere in the code to stop execution and get a debugger console
      gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
      gem 'rspec-rails'
      gem 'factory_bot_rails'
    end
    
    Rails 응용 프로그램에서 Rspec을 가져옵니다.
    /app# bundle exec rails g rspec:install
    Running via Spring preloader in process 1096
          create  .rspec
          create  spec
          create  spec/spec_helper.rb
          create  spec/rails_helper.rb
    

    좋은 웹페이지 즐겨찾기