Я пишу приложение Rails с функциональностью, которая взаимодействует со сторонним API (streamsend) через ActiveResource. Я использую вилку ActiveResource от shopify для потокобезопасной работы, потому что разные пользователи моего приложения будут иметь свои собственные идентификаторы клиентов API потоковой отправки и секретные ключи, и я не хочу, чтобы мое приложение наступало на них при взаимодействии со сторонним API. .
У меня есть это в моем контроллере, связанном с фильтром around_action
:
private
# set StreamSend credentials in every request
def set_ss_credentials
StreamSend.site,
StreamSend.user,
StreamSend.password = current_user_credentials
yield
ensure
StreamSend.site =
StreamSend.user =
StreamSend.password = nil
end
DEFAULT_SITE, DEFAULT_USER, DEFAULT_PASSWORD = [
Rails.application.secrets.streamsend_api_endpoint, "username", "password" ]
def current_user_credentials
current_user.present? ?
[ Rails.application.secrets.streamsend_api_endpoint, current_user.ss_userid, current_user.ss_key ] :
[ DEFAULT_SITE, DEFAULT_USER, DEFAULT_PASSWORD ]
end
И в моей модели:
class StreamSend < ActiveResource::Base
self.format = :xml
def self.audience
@audience ||= StreamSend::Audience.find(:first)
end
end
Сайт и учетные данные предназначены для ввода через действие контроллера и текущего пользователя, вошедшего в систему.
Это прекрасно работает при использовании WEBrick, но поскольку по умолчанию для Rails в рабочем режиме установлено значение config.eager_load = true
, мое приложение не запустится, поскольку в реальной модели также отсутствует сайт и учетные данные.
Есть ли способ заставить eager_load
игнорировать мои модели, зависящие от ARes, но с готовностью загружать все мои реальные модели базы данных?