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 поддерживает только одну аудиторию для каждой учетной записи.