Как предполагается использовать ShopifyAPI::GraphQL из драгоценного камня shopify_api? (неопределенный метод `path=' )

Я пытаюсь использовать ShopifyAPI::GraphQL из драгоценного камня shopify_api, который, похоже, отлично работает в моей локальной среде, но у меня возникают проблемы в моей среде Heroku.

Первая ошибка, похоже, была связана с ошибкой в ​​геме shopify_api и была исправлена ​​путем установки версии API, т. е. ShopifyAPI::Base.api_version = "2019-10" (хотя она уже была установлена ​​в файле config/initializers/shopify_app. rb с config.api_version="2019-10").

Двигаясь дальше, я получаю следующую ошибку при запуске сервера в среде Heroku:

NoMethodError: undefined method `path=' for nil:NilClass
info   /app/vendor/bundle/ruby/2.5.0/gems/shopify_api-8.1.0/lib/shopify_api/resources/graphql.rb:10:in `initialize'

Глядя на строки в файле graphql.rb из shopify_api, которые не работают:

uri = Base.site.dup #line 9
uri.path = Base.api_version.construct_graphql_path #line 10

кажется, это вызвано тем фактом, что Base.site равен нулю, что имеет смысл, поскольку во время запуска сервера нет сеанса.

Насколько я вижу, запросы graphql должны быть константами, и поскольку они ссылаются на клиент graphql, я создаю экземпляр клиента graphql в качестве параметра класса:

@@client = ShopifyAPI::GraphQL.new

Вышеупомянутая строка, кажется, инициализируется во время запуска сервера (я очень новичок в рельсах), и, как уже упоминалось, ошибка возникает из-за отсутствия сеанса и, следовательно, сайта в то время.

Так что я должен неправильно использовать компонент graphql. Мой вопрос в том, как я должен использовать класс ShopifyAPI::GraphQL? Где я должен, например. разместить код ShopifyAPI::GraphQL.new?

Или, чтобы сделать вопрос более общим - клиент graphql требует, чтобы запросы и, следовательно, клиент graphql ShopifyAPI:: GraphQL определялись как константы. Как предотвратить инициализацию констант во время запуска сервера, поскольку при запуске сервера нет сеанса, необходимого при инициализации клиента graphql?

Спасибо, -Луиза


person Lull    schedule 07.01.2020    source источник
comment
Можно успешно запросить API-интерфейс graphql с помощью решения const_set, упомянутого в stackoverflow.com/questions/50382830/, хотя также упоминается, что это вызывает проблемы с утечкой памяти. Я пока не буду закрывать эту тему, так как надеюсь найти решение, не дающее проблем с утечкой памяти. Альтернативой является использование другого гема для запросов graphql, так как в геме shopify_api также есть общая проблема с памятью — см. github.com/Shopify/shopify_api/issues/511   -  person Lull    schedule 08.01.2020