RoR (rails) Dockerfile tip

RoR (rails) Dockerfile tip

루비 온 레일즈 (Ruby on Rails)를 Docker 로 배포할 때 간단 팁입니다.

Rails 를 도커로 배포할 때 가장 큰 문제는 Rebuild 시간이 오래걸린다는 것입니다.

원인은 바로 bundler !!

$ bundle install

이놈이 오래걸립니다.

하여 예전에 이 Article 을 보고 적용해서 쓰던 중 보다 괜찮은 방법이 있어서 기록합니다.

Prerequisite

  • ruby 2.3.4
  • Rails 5.1.2
  • docker 17.06-ce

Rails on Docker

제가 쓰는 Dockerfile 을 아래 공유합니다.

FROM ruby:2.3.4-slim
LABEL maintainer="9to5, ktk0011+dev@gmail.com"

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    build-essential git libpq-dev nodejs vim libxslt-dev libxml2-dev cron && \
    rm -rf /var/lib/apt/lists/*

ENV INSTALL_PATH /app
WORKDIR $INSTALL_PATH

ENV BUNDLE_FROZEN=1 BUNDLE_DISABLE_SHARED_GEMS=true BUNDLE_WITHOUT=development:test

ADD ./bin $INSTALL_PATH/bin
COPY Gemfile Gemfile.lock ./
RUN bin/bundle install --deployment

ADD . $INSTALL_PATH

기존과의 차이점은 BUNDLE_FROZEN 을 이용해서 더이상 Gem변경을 허용하지 않으며,
BUNDLE_DISABLE_SHARED_GEMS 설정으로 번들 path를 고정하고,

BUNDLE_WITHOUT 을 이용해서 오직 deployment 환경을 대상으로만 bundle 을 관리합니다.

Conclusion

이런 형태로 사용한다면 docker 로 변경된 내용을 배포할 때 마다 bundler 때문에 시간이 소모되는 문제를 쉽게 해결 가능합니다.

[linux/unix] svn 사용 간단 tip

리눅스 유닉스에서 작업후 svn add 할 때에 추가할 파일과 그렇지 않고 로컬에서만 쓰는 파일(이를테면 테스트 파일 따위)들이 있는 경우가 있다.

이럴 경우 svn add가 불편한데 이때 사용하는 간단 스크립트 tip

svn status | grep "^?" | awk '{print $2}'

특정 파일이나 폴더를 제외하고 싶을 경우는 뒤에 파이프(|)추가후 egrep 추가
예로 tmp 폴더를 제외하고 싶을 경우.

svn status | grep "^?" | awk '{print $2}' |egrep -ve '^tmp$'

위의 스크립트를 적당히 수정한 후 파일로 저장

예를 들어 commit.sh 파일에 저장했을 경우에 svn add

svn add `./commit.sh`

바이너리 파일들(.so, .a 파일 등)도 추가하고 싶을 경우

svn add `./commit.sh` --no-ignore

간단 팁 완료.