Причиной проблемы была функция автозагрузки 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