4
0

More than 1 year has passed since last update.

Rails6 × Docker × MySQL × M1 Macでherokuデプロイ

Last updated at Posted at 2022-08-01

現在、制作中のRailsアプリのHerokuデプロイに大苦戦しました。
何度もエラーに遭遇したのですが、その中の1つを記録として残しておきます。

環境

  • M1 Mac
  • Rails6
  • MySQL バージョン5
  • Docker

前提

本番環境DBはHeroku無料枠のMySQLを使用します。
HerokuでMySQLを使用する場合は無料枠でもクレジットカード登録が必要です。
詳しくはこちら(Heroku公式)

Herokuデプロイに必要なファイル追加、DB追加、環境変数設定などは
こちらの記事を参考にさせて頂きました。

Herokuデプロイ

まず通常通りにコマンドを打っていきます。
dockerを使用しているのでContainer Registryにログインし、
imagesをpushする必要があります。

imagesをpushするのは結構時間がかかるので気長に待ちます。
今回、app名は、my-rails-appとします。

詳しくはDocker使用でのデプロイ方法(公式)

$ heroku container:login
$ heroku container:push web -a my-rails-app
$ heroku container:release web - a my-rails-app
$ heroku run rails db:migrate -a my-rails-app

M1に起こるエラー

マイグレートをすると下記のようなエラーが出てきます。

Error: Exec format error

下記のコマンドで原因を探ってみます。

 $ docker inspect registry.heroku.com/my-rails-app/web

[
....
 "Architecture": "arm64",
 "Os": "linux",
....
]

色々と書いているかと思うのですが、下の方に
アーキテクチャがarm64と書いてあり、こちらがエラーの原因となっているようです。
dockerのimagesをプラットフォームと合わせる必要があるみたいです。
解決方法はいくつかあるようですが、今回はDocker BuildxというDockerのプラグインを使用し、
プラットフォームを指定します。(このあたりよく理解できていないです....)

エラー対処コマンド

docker buildx build --platform linux/amd64 -t my-rails-app .
docker tag my-rails-app registry.heroku.com/my-rails-app/web
docker push registry.heroku.com/my-rails-app/web
heroku container:release web -a my-rails-app
heroku open -a my-rails-app

上記コマンドで無事にherokuにデプロイできました!
理解が追いついてないので、もう少し深掘りし随時更新していきます(@_@;)

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0