GraphQL не работает при развертывании на Heroku, но работает правильно на локальном компьютере (Gem Shopify Ruby)

Я использую приложение 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>'

Версии драгоценного камня, которую вы используете, больше 4 лет. С тех пор было выпущено несколько новых основных версий. Рассматривали ли вы возможность обновить драгоценный камень shopify до более новой версии?

spickermann 02.04.2024 08:04

@spickermann Да, я хотел обновиться до новой версии, но мое приложение довольно большое, и нужно внести много изменений, чтобы оно снова заработало. Я начал это делать, но сейчас у меня нет времени (я возобновлю работу над этим, когда смогу). Судя по ошибке, это действительно похоже на то, что это больше похоже на сторону/инициализацию GraphQL. Если бы это был сам драгоценный камень, я предположил бы, что REST API тоже не будет работать (и он не будет работать локально?)

bseido 02.04.2024 09:43

Можете ли вы предоставить полную трассировку стека ошибки?

engineersmnky 02.04.2024 21:02

@engineersmnky Я отредактировал свое сообщение, добавив обратную трассировку из консоли рельсов. Когда я просматриваю местоположение своих драгоценных камней локально, я не вижу папку «graphql-client-0.19.0», только папку «graphql-client-0.18.0».

bseido 03.04.2024 02:28

Похоже, вы обнаружили свою проблему: вы используете разные версии (выпущенные с разницей почти в 2 года).

engineersmnky 03.04.2024 05:04

@engineersmnky О, если я правильно понимаю, мне нужно заставить мой драгоценный файл использовать версию 0.18? Так что это будет использоваться на Heroku? У меня нет драгоценного камня gem 'graphql-client' в моем Gemfile, у меня есть только это (касательно моей проблемы): gem 'shopify_api', '~> 9.0.2' gem 'graphql', '1.10.3' И я не менял их версию в последнее время (я знаю, что меня нужно обновить). Полагаю, это тоже не должно работать локально ? Возможно я чего-то не понимаю

bseido 03.04.2024 09:17

Попробуйте добавить gem 'graphql-client', '0.18.0' в свой Gemfile и посмотрите, решит ли это проблему. shopify-api просто требует graphql-client без указания версии. Очевидно, что обновление shopify в будущем — лучший вариант, и тогда вы сможете удалить эту строку.

engineersmnky 03.04.2024 14:55

@engineersmnky Спасибо! Я попробую это, как только смогу

bseido 04.04.2024 03:53
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
8
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка произошла из-за обновления гема Graphql-client.

Этот драгоценный камень был обновлен в этом году, предыдущая версия была из 2022 года.

Версия Shopify Gem, которую я использую (9.0.2), использует последнюю версию Graphql-клиента, и она несовместима с этой версией Shopify Gem.

Я включил предыдущую версию в свой Gemfile, и теперь она снова работает.

Спасибо Enginesmnky за помощь

Другие вопросы по теме