docker-compose로 Rails5.2 개발 환경

7917 단어 docker-composeRails5
여기저기서 해설되고 있는 docker(compose)로 Rails5.2(+PostgreSQL)의 서버를 시작하는 방법입니다. Docker Desktop을 미리 설치하십시오(docker-compose 포함).

지금은 느낌도 있고, 이것이 정답이 아니라고 생각합니다만, 공식 절차 (을)를 참고에 가능한 한 커멘드를 심플하게 해 보았습니다. 운용해 가는데 있어서 결국 실행 취소(명령을 더한다) 가능성도 있습니다만, 우선 기동해 움직여 보기 위해공식 절차는 여러가지 하고 있다고 생각했기 때문에, 최대한 좁은 구성으로 하고 있습니다 .

(6계는 yarn과 webpacker 주위가 복잡하고 아직 경원하고 있습니다만… 일단 해 보았습니다 -> 기사 )

설치



먼저 필요한 파일은 두 개뿐입니다.

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
  web:
    build:
      context: .
      dockerfile: docker-web
    command: "rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/railsapp
    ports:
      - "3000:3000"
    depends_on:
      - db

docker-web
FROM ruby:2.6.6

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN gem install rails -v "~> 5.2" -N

RUN mkdir /railsapp
WORKDIR /railsapp
COPY . /railsapp
# 後で有効化
# RUN bundle install  

위의 두 파일을 넣은 디렉토리에서 새 프로젝트를 만듭니다.
docker-compose run web rails new . --database=postgresql

조금 시간이 걸리지만 rails 관련 새 파일이 생성되었습니다.



Docker 환경에서는 데이터베이스가 localhost에 존재하지 않으므로 composer에서 만든 db에 연결하도록 설정을 변경합니다.

railsapp/config/database.yml
host: db
username: postgres
password: secret

그런 다음 Dockerfile RUN bundle install의 행을 활성화하고 (주석 제거) build를 실행합니다.
docker-compose build
docker-compose up

지금까지 웹 서버가 시작된 상태이지만 데이터베이스를 초기화해야합니다. 다른 터미널을 시작하여 다음을 실행합니다 (exec는 컨테이너가 시작된 (= up 된) 상태에서 명령을 실행하는 부속 명령입니다).
docker-compose exec web rails db:create

여기까지 실행하면 브라우저에서 'localhost:3000'에 액세스하면 Rails의 첫 페이지가 보일 것입니다.



같은 요령으로, scaffold를 작성하거나, 여기로부터는 평소의 rails의 노리로 작업을 할 수 있을 것 같습니다(선두의 docker-compose exec web를 제외하면 보통의 Rails 명령입니다).
docker-compose exec web rails g scaffold post title:string body:text published:boolean
docker-compose exec web rails db:migrate



보충 1



디폴트의 ​​Gemfile은, bundle install 후에 여러 가지 경고가 나옵니다. 경고 내용에 따라 새로운 젬으로 교체하고 있습니다.

Gemfile
# gem 'sass-rails', '~> 5.0'
# ↓ 変更
gem 'sassc-rails'

# gem 'chromedriver-helper'
# ↓ 変更
gem 'webdrivers'

개발이 Docker(linux)라면 Windows의 신세가 될 것은 없기 때문에, 이하는 삭제해 버립니다. 참고 기사
# 削除
# gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

루비 2.7을 사용하고 싶었지만 Puma를 시작할 때 경고가 많이 나오기 때문에 2.6을 사용하고 있습니다.
/usr/local/bundle/gems/activemodel-5.2.4.1/lib/active_model/translation.rb:67: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call

보충 2



docker는 "경량"이라고 알려져 있지만, 여러 번 시도하고 의외로 디스크를 압박합니다. 때때로 불필요한 것은 삭제하는 것이 좋습니다. 다음은 개발 환경에서 빨리 삭제하는 경우의 예입니다.
$ docker ps -a | awk '{print $1}' | xargs docker rm
$ docker images | grep none | awk '{print $3}' | xargs docker rmi
  • docker image를 일괄 적으로 정리하고 싶습니다.
  • container와 image를 함께 삭제

  • 2020.08.12 추가
    다음 명령도 유용합니다 참고 기사
    docker system prune
    

    보충 3



    원래는 rails 프로젝트는 railsapp 서브디렉토리에 맞추기 위해 만들었습니다만, heroku+github의 제휴와 궁합이 나빴기 때문에 프로젝트 바로 아래에 배치하도록 조정하고 있습니다.

    관련 기사


  • Rails 5.2에서 다양한 시도
  • Rails5.2에서 Stripe 사용
  • docker-compose로 Rails6 개발 환경
  • 좋은 웹페이지 즐겨찾기