Я использую приложение Ruby с драгоценным камнем Shopify (версия 9.0.2).
Все работало хорошо до недавнего времени, когда внезапно он не смог проанализировать мой вызов GraphQL на Heroku.
Но когда я выполняю тот же процесс локально, он работает
Например, на обоих: -Я инициализирую ShopifyAPI с учетными данными, api_version.
-Я делаю следующую просьбу
query_variables = {'gid' => gid}
query_str = <<-'GRAPHQL'
query($gid: ID!) {
product(id: $gid) {
id
}
}
GRAPHQL
-После этого я инициализирую клиент:
client = ShopifyAPI::GraphQL.client
query_graph_ql = client.parse(query_str)
Локально работает хорошо, но на Heroku у меня следующая ошибка
«NoMethodError (неопределенные поля метода для nil:NilClass)»
и через пару месяцев это хорошо работало и на Heroku.
Кажется, это исходит от самого GraphQL, но я не понимаю, почему появилась эта ошибка. Как будто на Heroku было неправильно инициализировано
Кажется это не ссылка на мой магазин, так как я пробовал на другом, где не вносил никаких изменений и все равно не работает
Есть идеи, откуда взялась ошибка?
Я попробовал: Выполнение вызова Shopify GraphQL на Heroku Ожидается: получение моих данных Результат: Ошибка GraphQL: NoMethodError (неопределенные поля метода для nil: NilClass)
Обновлено: у меня нет проблем с REST API.
Edit2: Backtrace в консоли рельсов (с помощью Heroku Run Rails c):
app/vendor/bundle/ruby/2.6.0/gems/graphql-client-0.19.0/lib/graphql/client/document_types.rb:62:in `rescue in analyze_types'
/app/vendor/bundle/ruby/2.6.0/gems/graphql-client-0.19.0/lib/graphql/client/document_types.rb:45:in `analyze_types'
/app/vendor/bundle/ruby/2.6.0/gems/graphql-client-0.19.0/lib/graphql/client.rb:189:in `parse'
/app/lib/utilities/graphql.rb:29:in `query_shopify'
/app/lib/utilities/graphql.rb:368:in `get_product_by_id'
(irb):4:in `irb_binding'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/workspace.rb:85:in `eval'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/workspace.rb:85:in `evaluate'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/context.rb:385:in `evaluate'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:493:in `block (2 levels) in eval_input'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:647:in `signal_status'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:490:in `block in eval_input'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/ruby-lex.rb:246:in `block (2 levels) in each_top_level_statement'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `loop'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `catch'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `each_top_level_statement'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:489:in `eval_input'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:428:in `block in run'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:427:in `catch'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:427:in `run'
/app/vendor/ruby-2.6.6/lib/ruby/2.6.0/irb.rb:383:in `start'
/app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.8.1/lib/rails/commands/console/console_command.rb:64:in `start'
/app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.8.1/lib/rails/commands/console/console_command.rb:19:in `start'
/app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.8.1/lib/rails/commands/console/console_command.rb:96:in `perform'
/app/vendor/bundle/ruby/2.6.0/gems/thor-1.3.1/lib/thor/command.rb:28:in `run'
/app/vendor/bundle/ruby/2.6.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:in `invoke_command'
/app/vendor/bundle/ruby/2.6.0/gems/thor-1.3.1/lib/thor.rb:527:in `dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.8.1/lib/rails/command/base.rb:69:in `perform'
/app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.8.1/lib/rails/command.rb:46:in `invoke'
/app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.8.1/lib/rails/commands.rb:18:in `<top (required)>'
/app/bin/rails:4:in `require'
/app/bin/rails:4:in `<main>'
@spickermann Да, я хотел обновиться до новой версии, но мое приложение довольно большое, и нужно внести много изменений, чтобы оно снова заработало. Я начал это делать, но сейчас у меня нет времени (я возобновлю работу над этим, когда смогу). Судя по ошибке, это действительно похоже на то, что это больше похоже на сторону/инициализацию GraphQL. Если бы это был сам драгоценный камень, я предположил бы, что REST API тоже не будет работать (и он не будет работать локально?)
Можете ли вы предоставить полную трассировку стека ошибки?
@engineersmnky Я отредактировал свое сообщение, добавив обратную трассировку из консоли рельсов. Когда я просматриваю местоположение своих драгоценных камней локально, я не вижу папку «graphql-client-0.19.0», только папку «graphql-client-0.18.0».
Похоже, вы обнаружили свою проблему: вы используете разные версии (выпущенные с разницей почти в 2 года).
@engineersmnky О, если я правильно понимаю, мне нужно заставить мой драгоценный файл использовать версию 0.18? Так что это будет использоваться на Heroku? У меня нет драгоценного камня gem 'graphql-client'
в моем Gemfile, у меня есть только это (касательно моей проблемы): gem 'shopify_api', '~> 9.0.2' gem 'graphql', '1.10.3'
И я не менял их версию в последнее время (я знаю, что меня нужно обновить). Полагаю, это тоже не должно работать локально ? Возможно я чего-то не понимаю
Попробуйте добавить gem 'graphql-client', '0.18.0'
в свой Gemfile и посмотрите, решит ли это проблему. shopify-api
просто требует graphql-client
без указания версии. Очевидно, что обновление shopify
в будущем — лучший вариант, и тогда вы сможете удалить эту строку.
@engineersmnky Спасибо! Я попробую это, как только смогу
Ошибка произошла из-за обновления гема Graphql-client.
Этот драгоценный камень был обновлен в этом году, предыдущая версия была из 2022 года.
Версия Shopify Gem, которую я использую (9.0.2), использует последнюю версию Graphql-клиента, и она несовместима с этой версией Shopify Gem.
Я включил предыдущую версию в свой Gemfile, и теперь она снова работает.
Спасибо Enginesmnky за помощь
Версии драгоценного камня, которую вы используете, больше 4 лет. С тех пор было выпущено несколько новых основных версий. Рассматривали ли вы возможность обновить драгоценный камень
shopify
до более новой версии?