[Rails7] Docker에서 Heroku가 디버깅할 때까지 Rubi on Rails 애플리케이션을 구축합니다.
이번에는 Docker에서 루비 온 레일스 앱을 구축하고 Heroku에게 디버깅을 할 때까지 절차를 설명하면서 기사에 남기고 싶습니다.
컨디션
이번에 사용한 환경은 다음과 같다.
필요한 서류 준비
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 new
Rails 응용의 초기 형태를 제작한다.※ 데이터 베이스
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
그림처럼 보이시면 됩니다.🎉
이렇게까지 하다니 대단해!!!수고하셨습니다!
참고 자료
Reference
이 문제에 관하여([Rails7] Docker에서 Heroku가 디버깅할 때까지 Rubi on Rails 애플리케이션을 구축합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kino_puehddby/articles/21a3cf0aacee7c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)