Ruby Dockerfile에 특정 버전의 번들러를 추가하는 방법

4530 단어
약간 오래된 Ruby 프로젝트에서 작업할 때 일부 종속 항목(특히 DependaBOT pull 요청에서)을 업데이트하고 내 번들러 버전이 몇 가지 흥미로운 오류를 일으키는 것을 발견했습니다. 대부분 myGemfile.lock 및 특정 dep에 대해 예상한 버전과 호환되지 않습니다.

오류 메시지는 내 bundler 버전을 로컬로 업데이트하라는 지시였습니다.

그러나 이것은 로컬 프로젝트에서 작동할 수 있지만 Docker가 관련되어 있을 때 이것은 승려가 아닌 Ruby 개발자에게는 분명하지 않습니다.

솔루션은 다음과 같습니다.




ENV BUNDLER_VERSION='X.X.X'
RUN gem install bundler --no-document -v 'X.X.X'

X.X.X를 필요한 버전으로 바꾸십시오. 저에게는 2.2.4였습니다. 이미지 빌드 캐싱에 도움이 될 수 있도록 시스템 패키지가 설치된 후에 이것을 배치했습니다. (이것도 완전히 틀릴 수 있습니다!)

이는 레거시 프로젝트 또는 지원되지 않는 Docker 이미지 기반에만 적용되는 것이 아니라 도구 세트에 필요한 정확한 번들러 버전을 관리하는 데 매우 유용할 수 있습니다.

다음은 참조용으로 내 프로젝트의 최종Dockerfile입니다. 격리된 React 구성 요소와 PostCSS 매직에 webpacker를 사용하고 있습니다.

FROM ruby:2.5.1

# Replace with whoever you are!
LABEL maintainer="[email protected]"

# Allow apt to work with https-based sources
RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends \
  apt-transport-https

# Ensure we install an up-to-date version of Node
# see https://github.com/yarnpkg/yarn/issues/2888
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -

# Ensure latest packages for Yarn
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | \
  tee /etc/apt/sources.list.d/yarn.list

# Convention to use update and install on same line to actually install new packages
# We also use the line separation to make this easier to change
RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends \
  nodejs \
  yarn

# Setup our bundler version specifically
ENV BUNDLER_VERSION='X.X.X'
RUN gem install bundler --no-document -v 'X.X.X'

# Load our Gemfile and JS locks
COPY Gemfile* $YOUR_APPLICATION_PATH
COPY package.json $YOUR_APPLICATION_PATH

WORKDIR $YOUR_APPLICATION_PATH

# Install our dependencies
ENV BUNDLE_PATH /gems
RUN bundle install

# Handle yarn caching and install deps
COPY package.json yarn.lock ./
RUN yarn install --check-files

# Build the static assets and webpack data
COPY . $YOUR_APPLICATION_PATH
RUN bundle exec rake assets:precompile 

# Serve the application
ENV RAILS_SERVE_STATIC_FILES=true
ENV RAILS_LOG_TO_STDOUT=true
CMD ["bin/rails", "s", "-b", "0.0.0.0", "-e", "production"]



이 문제로 고생하는 누군가가 이것을 발견하기를 바랍니다! 이것이 작동하지 않으면 저에게 직접 연락 주시기 바랍니다.

행운과 행복한 해킹!

좋은 웹페이지 즐겨찾기