0
1

【Rails,Docker】Zeitwerk::NameError: expected file

Last updated at Posted at 2023-01-09

ローカルで動いたDocker+Railsアプリを本番環境で動かそうとしたところ、Webコンテナ(nginx)は立ち上がったが、appコンテナ(puma)のステータスがexitedになる状況が起こった。
docker logs で確認したところ、以下のようなエラー分が検出された。

log
Zeitwerk::NameError: expected file /app_name/app/controllers/function.rb  to define constant ... 

今回の場合、コントローラーに定義する関数が長くなり可読性を損なうため、ファイルを別のファイル(function.rb)で定義して、includeでコントローラに取り込んでいる。そのため、controllers配下に関数を定義するファイルがなく、Zeitwerk(Rails6.01から標準となっている定数の自動読み込み機能)がそれを検知してエラーを吐く。

対処法

config/application.rbにconfig.autoloader = :classicを追記

config/application.rb
module App
  class Application < Rails::Application
    config.autoloader = :classic
  end
end

Zeitwerkモードを利用しないように設定を変更している。これで一応動くようになるが、そもそも関数をどこに、どのように定義すべきなのか、その辺の課題は依然残る。

0
1
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
0
1