実現したいこと
GraphQL(Rails)で開発中のサービスにて、Mutationのresolveメソッドが呼ばれない事象が起きています。
上記事象を解消して、Mutationの実行ができるようにしたいです。
どなたかご存知の方、同様の事象にハマっている方がいらっしゃたら教えていただきたいです。
やったことなども見ていただきたいのですが、私の予想ではGraphQL、もしくはRails側に問題があるのではないかと考えております。
前提
現在Nextjs + GraphQL(Rails)で開発中のサービスにて、Mutationのresolveメソッドが呼ばれない事象が起きています。
発生している問題・エラーメッセージ
サービスの1機能として、ファイルアップロード機能をMutationで実現しようとしています。
通常の値更新のMutationについては問題なくresolveメソッドが呼び出されるのに対し、
ファイルアップロードが含まれるMutationについてはMutationのクラスが呼び出されていますがresolveメソッドが呼び出されていないです。
該当のソースコード
ruby
1# 2# ファイルアップロード機能を含んだMutation 3# 4module Mutations 5 class UpdateUser < BaseMutation 6 argument :name, String, required: false 7 argument :image, Types::Scalars::File, required: false 8 9 field :user, Types::UserType, null: true 10 field :errors, String, null: true 11 12 puts "+++++++++++++++++++" 13 puts "+++++++++++++++++++" 14 puts "+++++++++++++++++++" 15 puts "hogehoge" 16 puts "+++++++++++++++++++" 17 puts "+++++++++++++++++++" 18 19 def resolve(attributes) 20 # current_user = context[:current_user] 21 current_user = User.find(1) 22 23 puts "--------------------" 24 puts "--------------------" 25 puts "--------------------" 26 puts "--------------------" 27 28 current_user.name = 'test' 29 current_user.save! 30 end 31 end 32end
zsh
1# 2# 上記ソースコードを実行したときのリクエスト 3# クラス内「hogehoge」は呼ばれています。 4# しかし、resolveメソッド内の「---------------」は出力されていない かつ 5# SQLのUPDATE文が発行されていないことから呼び出されていないと判断 6# 7 8Started POST "/graphql" for 192.168.96.1 at 2023-05-01 22:52:55 +0900 9Processing by GraphqlController#execute as */* 10 Parameters: {"operations"=>"{\"operationName\":\"UpdateUser\",\"variables\":{\"name\":\"テスト太郎\",\"image\":null},\"query\":\"mutation UpdateUser($name: String, $image: File) {\\n updateUser(input: {name: $name, image: $image}) {\\n user {\\n id\\n name\\n nickname\\n __typename\\n }\\n __typename\\n }\\n}\"}", "map"=>"{\"1\":[\"variables.image\"]}", "1"=>#<ActionDispatch::Http::UploadedFile:0x00007f08170e6778 @tempfile=#<Tempfile:/tmp/RackMultipart20230501-111-w6zs3a.jpg>, @original_filename="calendar.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"1\"; filename=\"calendar.jpg\"\r\nContent-Type: image/jpeg\r\n">, "operationName"=>"UpdateUser", "variables"=>{"name"=>"テスト太郎", "image"=>#<ActionDispatch::Http::UploadedFile:0x00007f08170e6778 @tempfile=#<Tempfile:/tmp/RackMultipart20230501-111-w6zs3a.jpg>, @original_filename="calendar.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"1\"; filename=\"calendar.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "query"=>"mutation UpdateUser($name: String, $image: File) {\n updateUser(input: {name: $name, image: $image}) {\n user {\n id\n name\n nickname\n __typename\n }\n __typename\n }\n}"} 11 User Load (5.4ms) SELECT `users`.* FROM `users` WHERE `users`.`uid` = 'xxxxxxxxxxxxx' LIMIT 1 12 ↳ app/lib/jwt.rb:38:in `get_user_info' 13+++++++++++++++++++ 14+++++++++++++++++++ 15+++++++++++++++++++ 16hogehoge 17+++++++++++++++++++ 18+++++++++++++++++++ 19Completed 200 OK in 5478ms (Views: 0.3ms | ActiveRecord: 36.1ms | Allocations: 19767)
request
1# 2# 別プロジェクトで同様のクエリでファイルが送られることは確認済み 3# 4mutation UpdateUser($name: String, $files: [File!]) { 5 updateUser(input: {name: $name, files: $files}) { 6 errors 7 } 8}
response
1# 2# エラーなどなくnullが返る 3# 4{ 5 "data": { 6 "updateUser": null 7 } 8}
debug(graphql_controller.rb)
1# 2# GraqhQLのクエリが実行される段階で渡される引数についてデバッグした結果 3# 4 5########## 6# コード 7########## 8 9result = RailsAppSchema.execute(query, variables: variables, context: context, operation_name: operation_name) 10debugger 11render json: result.to_json 12 13################## 14# 各変数のデバッグ結果 15# 16# executeに渡されている変数(query, variables, context, operation_name)について調査 17# 18################## 19 20# 21# 実行クエリ 22# 23(rdbg) query 24"mutation UpdateUser($name: String, $image: File) {\n updateUser(input: {name: $name, image: $image}) {\n user {\n id\n name\n nickname\n __typename\n }\n __typename\n }\n}" 25 26# 27# 変数 28# 29(rdbg) variables 30{"name"=>"テスト太郎", 31 "image"=> #<ActionDispatch::Http::UploadedFile:0x00007f0814096a28 @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"1\"; filename=\"calendar.jpg\"\r\nContent-Type: image/jpeg\r\n", @original_filename="calendar.jpg", @tempfile=#<File:/tmp/RackMultipart20230501-111-cvuxz9.jpg>>} 32 33# 34# Context 35# 36(rdbg) context 37{:current_user=> nil, 38 :request=>#<ActionDispatch::Request POST "https://xxxxxxxxx/graphql" for 192.168.96.1>, 39 :user_agent=>"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36", 40 :remote_ip=>"192.168.96.1"} 41 42# 43# operation_name 44# 45(ruby) operation_name 46"UpdateUser"
試したこと
- gem
apollo_upload_server
を利用する前はこちらを参考に自前でファイルアップロード機能を実装し、本事象が発生。 - gem
graphql
のバージョンを別プロジェクトで正常に動いているバージョン(2.0.14
)に変更し試すも改善せず。 -
- で解消しなかったため、gem 'apollo_upload_server' を導入するも改善せず。
- Nextjsからではなく、クライアントツール(Firecamp)からクエリ実行するも同事象が発生。
補足情報(FW/ツールのバージョンなど)
- Rails 7.0.4.2
- GraphQL 2.0.14
- apollo_upload_server(2.1)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。