Open12
Docker+Rails herokuデプロイ
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
database.ymlのproductionを変更
production:
url: <%= ENV['DATABASE_URL'] %>
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
- herokuにログイン
$ heroku login
$ heroku container:login
- herokuアプリの作成
$ heroku create <ユニークなアプリ名>
- heroku Postgressを有効にする
$ heroku addons:create heroku-postgresql:hogehoge
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
本番環境とローカル環境での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
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
heroku configコマンド
- herokuの環境変数の一覧
$ heroku config -a <herokuアプリ名>
- heroku環境変数設定
$ heroku config:add <環境変数名>=<'環境変数の値'> -a <herokuアプリ名>
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
- 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アプリ名>
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
- アプリを開く
$ heroku open -a <herokuアプリ名>
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
エラーが起きたとき用の設定
- ログをたくさん吐いてくれるようにする環境変数の設定
$ heroku config:add RAILS_LOG_TO_STDOUT='true' <herokuアプリ名>
- ログの確認
$ heroku logs -t -a <herokuアプリ名>
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
機能追加・変更後の流れ
https://zenn.dev/link/comments/689d2215bb61d6 と同じ流れでビルドする
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
参考
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
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://
![tama8021](https://res.cloudinary.com/zenn/image/fetch/s--5DLj5xsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6be8838084.jpeg)
Circle CI 上で Heroku にイメージを push する際、「No image to push」というエラーが発生