LoginSignup
2
4

【Rails7 + Docker】ビューファイルの変更がlocalhostで反映されない不具合を解消する

Last updated at Posted at 2024-01-19

Docker化したRailsアプリを開発中、ビューファイル(.html.erb)のソースコードを変更して開発環境のlocalhostをリロードしても変更が反映されない不具合に遭遇しました。docker-compose.ymlでホストのディレクトリをコンテナにマウントしているため、それまではソースコードの変更はブラウザをリロードすると反映されていたのですが、急に反映されなくなりました。docker compose downで一旦コンテナを落としてからdocker compose upをすれば反映されるのですが、ソースコード変更の度にそれをやるのは効率が悪すぎるため、解決方法を調べ、自分が実際に上手くいった方法をまとめました。

環境は以下のとおりです。

  • OS:IntelMac
  • Docker
  • docker-compose
  • Rails7.0.6
  • PostgreSQL
docker-compose.yml
version: '3'
services:
  web:
    build: .
    image: rails_template:latest
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp

設定を追記

config/environments/development.rbを下記のようにします。

config/environments/development.rb
config.cache_classes = false

# 以下の設定はデフォルトでは記載なしの可能性もあり
- config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+ config.reload_classes_only_on_change = true
+ config.file_watcher = ActiveSupport::FileUpdateChecker

いろんな記事を見ていると「デフォルトでEventedFileUpdateCheckerになっているからFileUpdateCheckerに変えればよい」と書かれているのですが、自分の環境ではこの行が最初からなかったので、その場合下2つを追記すればいいと思います。

  • 参考記事1によると、config.cache_classes = falseかつconfig.reload_classes_only_on_change = trueの場合、config.file_watcherがenableになるようです。また、「ActiveSupport::FileUpdateCheckerおよびActiveSupport::EventedFileUpdateCheckerが指定されており、Rails7 系を利用している自分の環境では設定は必要なさそう」とあり、そもそも必要ない可能性もあるようです。
  • 参考記事2ではRails6を使用していますが、config.reload_classes_only_on_change = trueの設定はしておらず、結局何が正解かはわからないです。

PCを再起動

使っているPCを再起動しましょう。最初は上記の追記をやってコンテナを再度立ち上げても解消されませんでしたが、Macを再起動するときちんと反映されるようになりました。

  • 参考記事1や参考記事3にあるように、Dockerとホストで時間がずれていると、先程の追記だけでは解消されないようです。自分の場合、今回のエラーに遭遇するまでおそらく1週間以上はずっとMacの再起動やシャットダウンはしてなかったので、時間のずれが生じていた可能性があります。

参考記事

  1. 【Docker CE/Rails】ソースコードの変更が反映されない
  2. Docker + Rails6環境でコード即時反映されない件 - yposiのブログ
  3. dockerでrails5環境構築 #Ruby - Qiita
  4. 【Rails】Viewファイルの変更がページのリロードで反映されないときの対処法|Dockerのコンテナを再起動は不要(ビューファイル .html.erb)
  5. 【Rails6】Dockerコンテナを再起動しないとソースコードが反映されない #Rails - Qiita
  6. dockerにて、編集がローカルで反映されない
  7. railsでテンプレートがないと怒られる
  8. Vagrant + Rails 6.0.2.1 のdevelopmentでコード変更が反映されない現象を解決 - Just do IT
  9. Docker + Rails で開発していてソースコードが即時反映されない時のたったひとつのcoolな答え
2
4
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
2
4