やりたいこと
既存アプリに対してHEROKUでのdocker導入
環境
Ruby 2.6.5
rails 6.0
MySQL 5.6
M1チップ搭載MacOS
目次
###1.導入手順
% heroku login
% heroku container:login
% heroku container:push web -a <アプリ名>
% heroku container:release web -a <アプリ名>
% heroku run rails db:migrate
###2. 遭遇したエラー
Error: Exec format error
heroku run rails db:migrate実行したとき
(heroku run consoleやrails c実行時も同様)
heroku logs --tailでエラーログ確認するもわからず、
M1 MacでHeroku containerにデプロイしたらExec format errorと出て困った話
⬆こちらの記事を参照させていただきました。
% docker buildx build . --platform linux/amd64 -t <ユーザー名>/<アプリ名>:latest
上記コマンド実行時、またしてもエラー発生!
ERROR [10/12] RUN bundle exec rails webpacker:install
Errno::ENOSYS: Function not implemented - Failed to initialize inotify
config/environments/development.rb の config.file_watcherを
— caffepocari (@caffepocari) February 6, 2021
config.file_watcher = ActiveSupport::FileUpdateChecker
に変更(ポーリングで検知するやつ)したらいけた。やっぱそうなのか。
⬆こちらの方のツイートを参照させていただきました。
- config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+ config.file_watcher = ActiveSupport::FileUpdateChecker
config/enviroments/development.rbを書き換えます。
% docker tag <ユーザー名>/<アプリ名> registry.heroku.com/<アプリ名>/web
% docker push registry.heroku.com/<アプリ名>/web
% heroku container:release web -a <アプリ名>
% heroku run rails db:migrate
% heroku open
あとはイメージをプッシュし、リリース
###3. まとめ
これで無事HEROKU上でDockerコンテナが起動できました。
ローカル環境のDockerイメージをビルドして本番環境に直接アップしました。
前回の記事はこちら➡【M1チップ/Docker/Rails6/MySQL5】既存アプリをローカルでDocker環境を構築する道程で遭遇したエラー
ローカルで動かしたものを本番環境でも同様に動かすことができました。