[Rails7] Docker에서 Heroku가 디버깅할 때까지 Rubi on Rails 애플리케이션을 구축합니다.

13249 단어 DockerHerokuRailstech
안녕하세요.히사야입니다.
이번에는 Docker에서 루비 온 레일스 앱을 구축하고 Heroku에게 디버깅을 할 때까지 절차를 설명하면서 기사에 남기고 싶습니다.

컨디션


이번에 사용한 환경은 다음과 같다.
  • Docker
  • Ruby: 3.0.2
  • Rails 7.0.1
  • Node.js: 15.x
  • 필요한 서류 준비


    1. Rails 애플리케이션 생성


    먼저 Rails 애플리케이션에 필요한 파일을 만듭니다.
    이 부분은 주제와 맞지 않으니 간단하게 설명해 주세요.
    $ mkdir my-app
    $ cd my-app
    $ bundle init
    Writing new Gemfile to /path/to/my-app/Gemfile
    
    Gemfile 가능하므로 설치 레일로 편집했습니다.
    Gemfile
    # frozen_string_literal: true
    source "https://rubygems.org"
    git_source(:github) { |repo| "https://github.com/#{repo}.git" }
    
    gem "rails", "~> 7.0.0"
    
    그리고 실행bundle install생성Gemfile.lock.
    $ bundle install --path vendor/bundle
    
    rails newRails 응용의 초기 형태를 제작한다.
    ※ 데이터 베이스postgresql가 지정되었으며, MySQL 사용 시 지정mysql하십시오.
    $ echo y | bundle exec rails new . -d postgresql --skip-bundle --skip-turbolinks --skip-system-test
    
    계속 이러면 Heroku에서 디버깅을 할 때 Blocked host 오류가 발생하므로 config/environments/development.rb에 다음과 같은 내용을 추가합니다.
    config/environments/development.rb
    Rails.application.configure do
      ...
      config.hosts.clear
    end
    

    2. Dockerfile


    Dockerfile
    FROM ruby:3.0.2
    
    RUN set -x \
      && curl -sL https://deb.nodesource.com/setup_15.x | bash - \
      && 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 --no-install-recommends \
        build-essential \
        libpq-dev libxslt-dev libxml2-dev \
        nodejs yarn \
        curl vim sudo cron \
      && apt-get clean \
      && rm -rf /var/lib/apt/lists/* \
      && rm -rf /var/cache/yum/*
    
    # set environment variables
    ENV LANG C.UTF-8
    ENV APP_ROOT /app
    ENV BUNDLE_JOBS 4
    ENV BUNDLER_VERSION 2.2.25
    
    # working on app root
    RUN mkdir /app
    WORKDIR $APP_ROOT
    COPY Gemfile $APP_ROOT/Gemfile
    COPY Gemfile.lock $APP_ROOT/Gemfile.lock
    RUN gem install bundler -v $BUNDLER_VERSION
    RUN bundle -v
    RUN bundle install
    COPY . $APP_ROOT
    
    # execute script after build container
    COPY entrypoint.sh /usr/bin/
    RUN chmod +x /usr/bin/entrypoint.sh
    ENTRYPOINT ["entrypoint.sh"]
    EXPOSE 3000
    

    보태다


    많이 설치했지만 이 근처가 마음에 드세요.
    RUN set -x \
      && curl -sL https://deb.nodesource.com/setup_15.x | bash - \
      && 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 --no-install-recommends \
        build-essential \
        libpq-dev libxslt-dev libxml2-dev \
        nodejs yarn \
        curl vim sudo cron \
      && apt-get clean \
      && rm -rf /var/lib/apt/lists/* \
      && rm -rf /var/cache/yum/*
    
    이번에entrypoint.sh에서 공연하고 싶어서 설정ENTRYPOINT했습니다.
    COPY entrypoint.sh /usr/bin/
    RUN chmod +x /usr/bin/entrypoint.sh
    ENTRYPOINT ["entrypoint.sh"]
    

    3. entrypoint.sh


    entrypoint.sh
    #!/bin/bash
    
    set -ex
    rm -f /app/tmp/pids/server.pid
    
    if [ $RAILS_ENV = 'production' ]; then
      bundle exec rails assets:clobber
      bundle exec rails assets:precompile
    fi
    
    bundle exec rails server -b '0.0.0.0' -p ${PORT:-3000}
    
    공식 사이트에도 Heroku에서 Docker 이미지 처리를 할 때 환경 변수PORT에서 포트 번호를 받아야 한다고 쓰여 있다.
    bundle exec rails server -b '0.0.0.0' -p ${PORT:-3000}
    

    4. 확인


    이전에 생성된 파일을 확인합니다.
    $ tree -L 1 -a
    .
    ├── .bundle
    ├── .git
    ├── .gitattributes
    ├── .gitignore
    ├── .ruby-version
    ├── Dockerfile
    ├── Gemfile
    ├── Gemfile.lock
    ├── README.md
    ├── Rakefile
    ├── app
    ├── bin
    ├── config
    ├── config.ru
    ├── db
    ├── entrypoint.sh
    ├── lib
    ├── log
    ├── public
    ├── storage
    ├── test
    ├── tmp
    └── vendor
    

    Heroku를 위한 depro를 준비했습니다.


    이제 히로쿠 디프로 준비해.

    1. heroku 명령 설치


    heroku 명령이 설치되어 있지 않으면 설치하십시오.
    $ brew tap heroku/brew && brew install heroku
    
    자세한 내용은 공식 사이트를 참조하십시오.

    2.heroku-cli에 로그인


    $ heroku login
    

    3. Heroku로 새 프로그램 만들기


    $ heroku create my-app
    

    4. DB용 추가 기능 추가


    PostgreSQL 시


    공짜 Hobby Dev를 이용하세요.
    $ heroku addons:create heroku-postgresql:hobby-dev
    
    Heroku 응용 프로그램에서 환경 변수DATABASE_URL를 자동으로 설정합니다.

    MySQL의 경우


    무료igitte를 이용하세요.
    확인
    $ heroku addons:create cleardb:ignite
    $ heroku config
    CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
    
    $ heroku config 후 환경변수CLEARDB_DATABASE_URL가 추가되므로 이 값을 환경변수DATABASE_URL로 설정합니다.
    ※ Heroku에서(Rails4.1 이상일 때)config/database.yml 내용은 모두 무시되고DATABASE_URL DB의 연결 정보를 읽습니다.( 참조 1참조 2 ).
    $ heroku config:add DATABASE_URL='mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true'
    
    mysql2 사용 시 다음과 같이 설정하지 않으면 오류가 발생합니다.
    $ heroku config:add DATABASE_URL='mysql2://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true'
    

    5. 작성된 파일 제출


    $ bundle lock --add-platform x86_64-linux # MacOSを使用している場合
    $ git add .
    $ git commit -m "create rails app"
    

    Heroku에 대한 디버깅과 동작 확인


    1. Heroku에 응용 프로그램 적용


    $ git push heroku main
    

    2. 동작 확인


    $ heroku open
    

    그림처럼 보이시면 됩니다.🎉
    이렇게까지 하다니 대단해!!!수고하셨습니다!

    참고 자료


    https://devcenter.heroku.com/ja/categories/deploying-with-docker
    https://qiita.com/kodai_0122/items/67c6d390f18698950440

    좋은 웹페이지 즐겨찾기