#どんな記事か
- Rails+MySQLのアプリケーションをDockerで環境構築した人が、herokuで本番環境を構築できるようになる。
#対象読者
- DockerでRails+MySQLを起動して、「Yay! You’re on Rails!」を表示している人。
- 本番環境にも反映して誰からにも見せたい人。
- デプロイのエラーで躓いて困っている人。
#完成後のイメージと各ツールのバージョン
今回こちらの実機で確認しました。
- macOS Mojave 10.14.5
- Ruby 2.6.3
- MySQL 5.7
- Heroku 7.29
- Git 2.20.1
#そもそもどうやって、DockerでRails+MySQLの環境構築をすればいいのという方へ??
こちらのgithubのページで、確認してもらえたらと思います。。
https://github.com/YutakaYamasaki/docker_setup_rubyonrails
ちなみに、今回のソースは全て上記の手順を行なった後、デプロイする形になります。
#やること
- Railsのアプリケーション修正、追加
- Herokuにデプロイ
##Railsアプリケーションのファイルを修正、追加する。
###Gemfile(修正、追加)
ここで、mysqlとpgのgemを修正、追加します。
開発環境ではMySQLを使用しますが、本番環境(デプロイ)ではPostgreSQLを使用していきます。
変更前と変更後です。
##変更前
gem 'mysql2', '>= 0.4.4', '< 0.6.0'
##変更後
gem 'mysql2', '>= 0.4.4', '< 0.6.0', groups: %w(test development), require: false
gem 'pg', '~> 0.19.0', group: :production, require: false
##database.yml(修正、追記)
こちらのファイルにも、本番環境ではPostgreSQLを使用するので、下記のように修正してください。
production
の項目がなければ、追記してください。
項目があれば、削除してください。
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
##heroku.yml(新規ファイル作成)
heroku.ymlファイルを作成します。
アプリのファイルの直下に、heroku.ymlファイルを作成して、下記のように記載してください。
build:
docker:
web: Dockerfile
run:
web: bundle exec puma -C config/puma.rb
これで各ファイルの編集が完了しました。
Docker側にもファイルの変更を反映させておきましょう。
$ docker-compose build
誤字脱字がないか確認した後に、
Herokuへデプロイを進めましょう!
#Herokuにデプロイ
基本全てターミナルで行います。ターミナルの操作に慣れているという前提で進めていきます。
##Herokuにログイン
下記のコマンドを打ちます。
途中でエンターキーを押すとブラウザが立ち上がるので、ブラウザで操作してログインが終わると、
ターミナルの方でもログインができます。
$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
##ここでエンターキーを押すとブラウザが開くので、ログインを行う。
##ブラウザでログインができてターミナルに戻ると、下記が表示されるはず
Opening browser to https://cli-auth.heroku.com/auth/browser/**************
Logging in... done
Logged in as *******@email.com
##Herokuにアプリケーションを作成する。
下記のコマンドを打ちます。
すると、URLが自動発行されます。
$ heroku create
##ちなみにcreateの後にスペースキーを押して、好きなアプリ名を入力すると、そのアプリ名のURLが自動発行されます。お試しあれ
Creating app... done, ⬢ *******
https://******.herokuapp.com/ | https://git.heroku.com/*******.git
##Heroku側でPostgreSQLを使用する。
Heroku側でPostgreSQLを使用するように設定します。
クレジットカードを登録したり、有料会員になるとMySQLも使用できます。
$ heroku addons:create heroku-postgresql:hobby-dev
Creating heroku-postgresql:hobby-dev on ⬢ ******... free
Database has been created and is available
! This database is empty. If upgrading, you can transfer
! data from another database with pg:copy
Created postgresql-transparent-70433 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation
ちなみに、このURLにアクセスしてもエラーが出てきます。なぜなら、アプリがHeroku側にないから。
これからアプリをheroku側にアップロードして、デプロイします。
Heroku.ymlを使ってデプロイする。
Herokuではコンテナ諸々をデプロイすることができます。
その中で、デプロイする方法は2通りあります。
- Container Registry GAを使用してデプロイ
- Heroku.ymlを使用してデプロイ←今回はこちらを使用。
詳細は下記見てもらえると
https://devcenter.heroku.com/categories/deploying-with-docker
まずは、Heroku側でStackをcontainerにセットします。
$ heroku stack:set container
その後、下記のコマンドを打って、デプロイをしましょう。
$ git init
$ git add .
$ git commit -m "******"
$ git push heroku master
#デプロイできたか確認する。
下記のコマンドでブラウザが立ち上がり、Railsのアプリケーションがデプロイされているか確認します。
$ heroku open