Open9

Docker+Rails+Postgres herokuデプロイ

database.ymlのproductionを変更

production:
  url: <%= ENV['DATABASE_URL'] %>
  • herokuにログイン
$ heroku login
$ heroku container:login
  • herokuアプリの作成
$ heroku create <ユニークなアプリ名>
  • heroku Postgressを有効にする
$ heroku addons:create heroku-postgresql:hobby-dev

本番環境とローカル環境でのDockerの環境を使い分けるための設定

  • Dockerfileに追加
FROM ruby:3.0.1

+ENV RAILS_ENV=production 

RUN 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 nodejs yarn

WORKDIR /app
COPY . /app
RUN bundle config --local set path 'vendor/bundle' \
  && bundle install

+COPY start.sh /start.sh
+RUN chmod 744 /start.sh
+CMD ["sh", "/start.sh"]
  • トップディレクトリーに start.shファイルを作成
#!/bin/sh

if ["${RAILS_ENV}" = "production"]
then
    bundle exec rails assets:precompile
fi

bundle exec rails s -p ${PORT:-3000} -b 0.0.0.0

heroku configコマンド

  • herokuの環境変数の一覧
$ heroku config -a <herokuアプリ名>
  • heroku環境変数設定
$ heroku config:add <環境変数名>=<'環境変数の値'> -a <herokuアプリ名>
  • herokuにコンテナのプッシュ(imageのbuildもやってるみたい)
$ heroku container:push web -a <herokuアプリ名>

$ heroku container:release web -a <herokuアプリ名>
  • マイグレーションの実行
$ heroku run bundle exec rake db:migrate RAILE_ENV=production -a <herokuアプリ名>
  • アプリを開く
$ heroku open -a <herokuアプリ名>

エラーが起きたとき用の設定

  • ログをたくさん吐いてくれるようにする環境変数の設定
$ heroku config:add RAILS_LOG_TO_STDOUT='true' <herokuアプリ名>
  • ログの確認
$ heroku logs -t -a <herokuアプリ名>
ログインするとコメントできます