0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails6.1】デプロイ時のZeitwerk::NameError

Posted at

はじめに

自動デプロイを設定していたのですが、mainにマージした後、確認してみたらサイトが表示されなくなってしまいました。

おかしいと思って、GithubのActionsを確認すると「×」になっていてデプロイに失敗していたことが発覚。

原因は単純なことだったので簡単に記録しておきます。

エラーの解消

Githubのデプロイに失敗したActionsで表示されていたメッセージがこちらです。

***/app/controllers/admin/searches_controller.rb to define constant Admin::SearchesController, but didn't (Zeitwerk::NameError)

      raise Zeitwerk::NameError.new(msg, cref.last)
      ^^^^^

どうやら「searches_controller.rb」に問題があるようです。
確認してみるとファイルの中は以下のようになっていました。

searches_controller.rb
# 後で消す

# class Admin::SearchesController < ApplicationController
#   before_action :authenticate_admin!

#   def search
#   :
#   :

※これは、このコントローラは使う必要がなくなったはずだけど、念のためコメントアウトして残しておいて、様子を見て問題がなければ消そうと思っていたが故の記述です。

ZeitwerkはRailsの命名規則にのっとって自動でファイルを読み込んでくれるGemです。

開発環境では問題なく動いていたので良しとしていたのですが、恐らく、「searches_controller.rb」というファイルには「SearchesController」という名前が設定しているはずなのに見つけることが出来なくてデプロイ時に起動をストップさせたのでしょう。

このファイルは不要なことを確認したので、削除して再びmainにpushするとデプロイに成功してサイトを表示することができました。

エラーで表示されていたように、ただの「NameError」でした。

ちなみに余談

今回のデプロイに失敗してしまう問題は、解決したのですが、デプロイ時のメッセージに気になる記述が…

warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.

警告 package-lock.json が見つかりました。プロジェクトには、Yarn 以外のツールによって生成されたロック ファイルが含まれています。同期されていないロック ファイルによって引き起こされる解像度の不一致を避けるために、パッケージ マネージャーを混在させないことをお勧めします。この警告をクリアするには、package-lock.json を削除します。

これで止まってしまうということはなかったのですが、ちょっと気になる内容だったので調べてみることにしました。

どうやら、「package-lock.json」と「yarn.lock」が共存しているとエラーになることがあるようです。

「package-lock.json」と「yarn.lock」は両者ともパッケージのバージョン管理をしてくれるもので、npmで導入するかyarnで導入するかによって管理するファイルが変わるようです。

確かに、うっかりnpmとyarnで同じライブラリを別のバージョンで入れてしまったりしたら不具合が起きるのかも…?
パッケージ管理の際も、npmかyarnで統一したり、注意が必要そうです…。

おわりに

開発時には問題なかったはずなのに、本番環境でエラーが出ると焦ってしまいます。

よくよく確認してみると単純なことが原因だったりするので、エラーが出たときこそ落ち着いて対応する必要があるなと感じました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?