rails (5.2.2.1)
graphql (1.9.3)
見慣れぬエラーメッセージ
rmosolgo/graphql-rubyを使っていると、まれに以下のようなエラーメッセージに遭遇することがあります。
LoadError - Unable to autoload constant Types::MutationType, expected .../app/graphql/types/mutation_type.rb to define it:
こちらのエラー、特にMutationを使用していないプロジェクトでも発生することがあり、かつ内容やトレースからは原因が追いづらいものになってます。どうして怒られたのでしょうか。
対処
そこで真の原因究明のため、いったん以下の変更を加えてみます。
# config/application.rb
config.paths.add 'app/graphql/types', eager_load: true`
あまりスマートな方法ではありませんが、「 Types::MutationType
が無い」と怒られたので明示的にautoloadさせてみた感じですね。
これで一旦冒頭のような奇妙なメッセージは消え去り、下記の通りより本当のエラーに近い内容がトレースされるようになりました。
/myapp/app/graphql/queries/select_query.rb:26: syntax error, unexpected ':', expecting '}' result: row, ^
ご覧の通りで、今回の場合原因は単なるrubyのシンタックスエラーだったことが分かったのですが、最初の表示はトレースを追っても全然到達できず、これには中々ハマりました。
本家issueの状況
Trying to use a union, getting "Unable to autoload constant Types::MutationType" #1245
本家にも似たようなissueがありますが、2019/3/28現在はfixのないままcloseされてる状態のようです。
それにしてもこの挙動には何人も苦しんでるようで、スキを見てPR投げてみようかなという気持ちになりますね ^^;