[Rails] Rails6.0x Docker x MySQL을 사용하여 환경 구축

12380 단어 MySQLDockerRubyRails

입문


Rails 6.0x Docker로 환경을 구축하고 싶을 때 까다로울 줄 몰랐기 때문에 필기로 투고했습니다.
이것은 공부하고 있는 초보자의 보도다.만약 잘못이 있다면 기쁨을 지적하세요!

다양한 버전


다음 버전의 동작을 확인했습니다.
  • macOS Mojave 10.14.6
  • Ruby 2.6
  • Rails 6.0.0
  • Docker 19.03.1
  • docker-compose 1.24.1
  • MySQL 8.0
  • 단계


    공식 문서에 따라 다음과 같은 절차에 따라 구축한다.
    또한 문서에서 rails5계로 진행되기 때문에 rails6계로 적당히 교체합니다.
  • 각종 파일 준비
  • rails new로 응용 프로그램 만들기
  • 구축 이미지
  • database.yml 설정 및 데이터베이스 연결
  • 컨테이너 부팅
  • 하나하나 자세히 보다.

    1. 각종 서류 준비


    임의의 디렉터리를 만들고 그 아래에Dockerfile docker-compose.yml Gemfile Gemfile.lock entrypoint.sh.
    $ mkdir myapp
    $ cd myapp
    
    각 파일의 내용은 다음과 같습니다.

    Dockerfile


    Dockerfile
    
    FROM ruby:2.6
    RUN 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 \
        && mkdir /myapp
    WORKDIR /myapp
    COPY Gemfile /myapp/Gemfile
    COPY Gemfile.lock /myapp/Gemfile.lock
    RUN bundle install
    COPY . /myapp
    
    COPY entrypoint.sh /usr/bin/
    RUN chmod +x /usr/bin/entrypoint.sh
    ENTRYPOINT ["entrypoint.sh"]
    EXPOSE 3000
    
    CMD ["rails", "server", "-b", "0.0.0.0"]
    
  • 기본 JavaScript 컴파일러를 rails6.0에서 webpacker로 변경합니다.참고: Rails Guide
  • webpacker 배치에 필요한 패키지 관리자yarn를 설치하기 위해 웹 페이지 정보 작성RUN 명령을 참고하십시오.
  • docker-compose.yml


    docker-compose.yml
    
    version: '3'
    services:
      db:
        image: mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: password
        ports:
          - '3306:3306'
        command: --default-authentication-plugin=mysql_native_password
        volumes:
          - mysql-data:/var/lib/mysql
      web:
        build: .
        command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
        volumes:
          - .:/myapp
        ports:
          - "3000:3000"
        depends_on:
          - db
        stdin_open: true
        tty: true
    volumes:
      mysql-data:
        driver: local
    
  • MySQL8.0은 보안이 강화된 것 같아서 --default-authentication-plugin=mysql_native_password 인증 방법을 mysql_native_password 로 변경해야 합니다.(자세한 상황은 아직...)
    참고: MySQL 릴리즈 노트
    참고: Qiita 기사
  • Gemfile


    Gemfile
    
    source 'https://rubygems.org'
    gem 'rails', '~>6'
    

    Gemfile.lock

    # 何も記述しない空ファイルのままでOK
    

    entrypoint.sh


    entrypoint.sh
    
    #!/bin/bash
    set -e
    
    # Remove a potentially pre-existing server.pid for Rails.
    rm -f /myapp/tmp/pids/server.pid
    
    # Then exec the container's main process (what's set as CMD in the Dockerfile).
    exec "$@"
    

    2. rails new로 어플리케이션 만들기


    5개의 파일을 준비한 후 터미널에서 다음 명령을 실행합니다.
    $ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker
    
  • 나중에 RSpec--skip-test 가져오기 옵션을 위해 Minitest를 건너뜁니다.
  • --webpacker 웹Packer 설치를 선택합니다.
  • 3. 이미지 구축

    rails new에서 각종 파일 제작, 웹 패커 설치를 마친 후 Gemfile 업데이트되어 이미지를 구축합니다.
    $ docker-compose build
    

    4. database.yml 설정 및 데이터베이스 연결


    편집rails new에서 작성된 config/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: myapp_development
    
    test:
      <<: *default
      database: myapp_test
    
    production:
      <<: *default
      database: myapp_production
      username: myapp
      password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
    
    데이터베이스를 만듭니다.
    $ docker-compose run web rake db:create
    

    5. 용기 시작


    다음 명령을 사용하여 컨테이너를 시작합니다.
    $ docker-compose up
    
    localhost:3000 예제 페이지가 표시됩니다.

    마지막


    이렇게 하면 환경 구축이 순조롭게 완성될 것이다.
    Dockerfile 같은 것은 더 좋은 쓰기 방법이 있을 수 있지만, 어쨌든 먼저 움직이면 된다.

    참고 자료

  • Quickstart: Compose and Rails
  • yarn Installation
  • Docker를 사용하여 Rails6 환경 구축 시도
  • Docker에서 Rails6의 개발 환경을 구축할 때 매혹적인 일
  • Rails6 개발 시 넘어질 수 있는 웹 패커, yarn 관계의 오류와 해결 방법
  • Rails6Webpacker 오류
  • 좋은 웹페이지 즐겨찾기