Docker로 Rails 환경 구축

아웃풋 연습 & 초심으로 돌아가서 기초에서 Rails를 재검토하려 합니다.
부정기적으로 업데이트합니다.

이번에는 Ruby on Rails의 환경 구축.

이번에는 Docker에서 Rails 튜토리얼을 진행하기 위한 Rails 프로젝트를 만듭니다.
rbenv 등을 이용한 로컬 환경 구축이 아닙니다.

전치



전제로...


  • 다음의 경우는 로컬에서의 환경 구축을 추천합니다
  • rails의 환경 구축 한 번도 한 적이 없다
  • docker를 사용한 개발을 한 적이 없다 (Dockerfile의 기술을 모른다)
    ### 응용 요구 사항
  • 루비 2.6.5
  • rails 6.2.0
  • sqlite3
  • webpacker, spring은 우선 불필요하므로 제외


  • 굉장히 짜증나지만, 이런 이미지, 컨테이너를 만드는 것이 목표입니다.

    렛츠 환경 구축



    STEP1 rails new 명령까지 준비



    PJ 용 디렉토리를 만들고 그 안에서 작업합니다.

    먼저 필요한 파일을 준비합시다.
    touch Dockerfile docker-compose.yml Gemfile Gemfile.lock .gitignore
    Gemfile
    source 'https://rubygems.org'
    git_source(:github) { |repo| "https://github.com/#{repo}.git" }
    
    ruby '2.6.5'
    
    gem 'rails', '~> 6.0.2', '>= 6.0.2.1'
    
    

    Dockerfile
    FROM ruby:2.6.5-alpine
    
    ENV LANG="C.UTF-8" \
        PACKAGES="curl-dev build-base alpine-sdk tzdata sqlite-dev less ruby-dev nodejs"
    
    RUN apk update && \
        apk add --no-cache --update $PACKAGES
    
    WORKDIR /var/www
    
    COPY ./ ./
    
    RUN gem install bundler && \
        bundle install -j4
    
    EXPOSE 3000
    
    CMD ["rails", "server", "-b", "0.0.0.0", "-p", "3000"]
    
    

    docker-compose.yml
    version: '3'
    services:
      app:
        build:
          context: ./
          dockerfile: Dockerfile
        volumes:
          - ./:/var/www
        ports:
          - "3000:3000"
        tty: true
        stdin_open: true
        restart: always
    
    

    .gitignore
    # Ignore bundler config.
    /.bundle
    
    # Ignore the default SQLite database.
    /db/*.sqlite3
    /db/*.sqlite3-journal
    /db/*.sqlite3-*
    
    # Ignore all logfiles and tempfiles.
    /log/*
    /tmp/*
    !/log/.keep
    !/tmp/.keep
    
    # Ignore uploaded files in development.
    /storage/*
    !/storage/.keep
    
    /public/assets
    .byebug_history
    
    # Ignore master key for decrypting credentials and more.
    /config/master.key
    
    .idea
    .vscode
    .DS_store
    
    

    일단 여기까지 만들어 버립니다.
    (.gitignore는 원한다면)

    여기까지 만들면 이미지를 만듭니다.docker-compose build

    STEP2 Rails 프로젝트 작성, 미세 수정



    build가 완료되면 드디어 Rails 프로젝트를 만듭니다.
    -d sqlite -> 使用DBをsqlite3を選択-B -> プロジェクト作成後のbundle installをしない(修正するからスキップで)--skip-webpack-install -> プロジェクト作成後のwebpacker:installをしない--skip-spring -> プロジェクト作成後のspringのinstallをしないdocker-compose run --rm app rails new -d sqlite3 -B --skip-webpack-install --skip-spring .
    명령을 실행하면 일부 파일이 이미 존재하지만 어떻게해야합니까 ~? 같아요.
    .gitignore 파일은 덮어 쓰지 않고 Gemfile은 덮어 씁니다.
        conflict  .gitignore
    Overwrite /var/www/.gitignore? (enter "h" for help) [Ynaqdhm] n
            skip  .gitignore
        conflict  Gemfile
    Overwrite /var/www/Gemfile? (enter "h" for help) [Ynaqdhm] Y
           force  Gemfile
    

    Gemfile의 webpacker에 대한 설명을 지웁니다.

    Gemfile
    # 下記二行を削除
    # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
    gem 'webpacker', '~> 4.0'
    

    서버를 시작한 후 sw.js가 없으면 오류를 토해 버리므로 임시로 만들어 둡시다.touch public/sw.js
    여기까지 오면 좀 더, bundle install과 db의 작성, 마이그레이션을 실행합니다.

    그 전에 gem을 업데이트하기 위해 다시 빌드 해 봅시다.
    docker-compose builddocker-compose run --rm app rails db:createdocker-compose run --rm app rails db:migrate

    STEP3 Rails 프로젝트 시작



    그리고는 명령 하나로 Rails 서버가 시작됩니다.docker-compose up -d
    http://localhost:3000 에서 일어나는 것을 확인합시다.



    했어.

    끝에



    완성된 소스 코드는 여기에 있습니다. (변경 있을지도 모르지만)

    RubyMine을 최근에 구입했기 때문에 앞으로 우키 우키로 코드 쓰려고합니다.

    Rails에 관한 기사를 앞으로 부정기입니다만 숙련 업 해 가므로 좋으면!

    좋은 웹페이지 즐겨찾기