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

Я пишу приложение Rails с функциональностью, которая взаимодействует со сторонним API (streamsend) через ActiveResource. Я использую форк Shopify ActiveResource для поточно-ориентированной работы, потому что разные пользователи моего приложения будут иметь свои собственные идентификаторы клиента 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-зависимые модели, но стремиться загрузить все мои действительные модели базы данных?

1 ответ

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

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

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

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