Rails отключает нетерпеливую загрузку для конкретной модели

Я пишу приложение 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, но с готовностью загружать все мои реальные модели базы данных?


person John Jensen    schedule 15.10.2015    source источник


Ответы (1)


Ошибки при запуске в режиме производства исходили из этого:

def self.audience
  @audience ||= StreamSend::Audience.find(:first)
end

Жесткое кодирование audience на 1 по умолчанию позволило мне запустить приложение в рабочем режиме. На данный момент это нормально, потому что Streamsend поддерживает только одну аудиторию для каждой учетной записи.

person John Jensen    schedule 15.10.2015