ActiveResource "NoMethodError (неопределенный метод `путь' для nil:NilClass):" прерывистая ошибка

Я сталкиваюсь с прерывистой ошибкой, когда вызывается ресурс ActiveResource, например:

Cart.where(session_id: get_guid, status: 1)

Выдает ошибку:

NoMethodError (undefined method `path' for nil:NilClass)

Но только с перерывами. Перезапуск сервера Rails временно решает проблему, но через некоторое неопределенное время он снова ломается.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
471
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Источником проблемы была функция автозагрузки Rails. Несколько осознаний привели меня к этому решению.

У нас было много ресурсов ActiveResource, поэтому, чтобы легко инициализировать ресурсы, мы поместили настройку в инициализатор (который запускается только во время запуска сервера Rails):

# config/initializers/active_resource_setup.rb

Cart.site = ENV["ROOT_URL"]

Я также понял, что это не проблема в производственной среде. Раньше это было не так ясно, потому что эта проблема возникла во время значительного обновления Rails, поэтому я решил, что сломал ее с самого начала.

Однако источник проблемы заключался в том, что Rails автоматически перезагружала файлы определения класса ресурсов всякий раз, когда в исходный код вносились изменения. Это перезагрузит определение класса:

# app/models/resources/cart.rb

class Cart < ActiveResource::Base
  validates :session_id, presence: true
end

И поскольку определения Cart.site не было в этом файле, как предполагалось, ресурс был фактически сброшен, а конфигурация site была уничтожена процессом автоматической перезагрузки.

Решение состоит в том, чтобы переместить определение Cart.site в определение ресурса:

# app/models/resources/cart.rb

class Cart < ActiveResource::Base
  self.site = ENV["ROOT_URL"]

  validates :session_id, presence: true
end

да, инициализаторы запускаются только при запуске приложения. Но у вас небольшая опечатка, вы пропустили закрытие ] в ENV VAR.

lacostenycoder 28.05.2019 19:56

@lacostenycoder Исправлено, спасибо! Должно быть, я упустил это из виду, делая пример кода намного проще, чем реальный код, ха-ха.

taylorthurlow 28.05.2019 20:24

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