質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Q&A

解決済

1回答

10328閲覧

Zeitwerk::NameErrorを解決したい

takamaru_ss

総合スコア6

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

0グッド

0クリップ

投稿2021/10/28 14:52

発生した問題

RailsアプリをHerokuにデプロイしたところ、Zeitwerk::NameErrorが発生してしまい、アプリがクラッシュしてしまいました。
コンソールを開くとオートロードに必要なコントローラーのファイルが存在しないと言われています。

エラーメッセージ

/app/vendor/bundle/ruby/3.0.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader/callbacks.rb:18:in `on_file_autoloaded': expected file /app/app/controllers/users/youtube_controller.rb to define constant Users::YoutubeController, but didn't (Zeitwerk::NameError)

状況

Rails6のActionTextでYoutubeの埋め込みを行うためにYoutubeControllerを作成しました。

エラーコードでは/app/app/controllers/users/youtube_controller.rbがありませんと言われていますが、このディレクトリ(他のコントローラーと同じ)にはyoutube_controller.rbは存在しています。

こちらの質問https://teratail.com/questions/247012ではファイル名と定義したコントローラーの名前に齟齬があったことが原因で同じエラーが出ていたようですが、私のyoutube_controller.rbの中身は

class YoutubeController < ApplicationController def show @youtube = Youtube.new(id: params[:id]) content = render_to_string( partial: "youtubes/thumbnail", locals: { youtube: @youtube }, formats: [:html] ) render json: { sgid: @youtube.attachable_sgid, content: content } end end

となっており、コントローラー名に別の文字列を使用したりはしていません。

補足情報

ローカルではエラーは発生しておらず、ページの表示、Youtubeの埋め込み、再生全て問題なくできています。
Herokuに公開している本番環境はトップページを開くこともできなくなっています。

ファイルが存在しているのにありませんと言われているため何を修正したらいいのかわからないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

YoutubeController で、 Users::YoutubeController ではないからです

投稿2021/10/28 22:47

winterboum

総合スコア23549

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takamaru_ss

2021/10/30 14:20

ありがとうございます。解決しました。 controllersディレクトリの下にディレクトリがある際にはコントローラーの定義をディレクトリ名::コントローラー名にすることを学ばせていただきました。
winterboum

2021/10/30 23:35 編集

Rails では、class名と置かれる場所の関係は厳密ですので。 controller に限らず、です。
takamaru_ss

2021/11/01 16:01

重ね重ねありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問