Open12

Docker+Rails herokuデプロイ

tama8021tama8021

database.ymlのproductionを変更

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

本番環境とローカル環境での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
tama8021tama8021

heroku configコマンド

  • herokuの環境変数の一覧
$ heroku config -a <herokuアプリ名>
  • heroku環境変数設定
$ heroku config:add <環境変数名>=<'環境変数の値'> -a <herokuアプリ名>
tama8021tama8021
  • 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アプリ名>
tama8021tama8021

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

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

mysql

基本的な流れは同じ。
違う点としてはHerokuのDBのアドオンを使う

cleardbというクラウド上でMysqlを使うためのサービスがあります。プランはがいくつかありますが、igniteは無料です。

コマンドの流れ

// herokuにログイン
$ heroku login
$ heroku container:login

// アプリ作成*1
$ heroku create アプリ名

$ heroku addons:add cleardb
$ heroku config:set DATABASE_URL=`heroku config:get CLEARDB_DATABASE_URL | sed -- s/mysql/mysql2/`
↑これを短縮したやつ

// デプロイ
$ heroku container:push web -a [アプリ名]
$ heroku container:release web -a [アプリ名]
$ heroku run rails db:migrate -a [アプリ名]
$ heroku open -a [アプリ名]

*1 GUIでもできる

*2 参照

$ heroku config | grep CLEARDB_DATABASE_URL
> CLEARDB_DATABASE_URL => mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true

$ heroku config:set DATABASE_URL='mysql2://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true'

info>>If you’re using the mysql2 gem, you will need to change the mysql:// scheme in the CLEARDB_DATABASE_URL to mysql2://