Как я интегрирую Hoptoad с DelayedJob и DaemonSpawn?

Проблема состоит в том, что безопасность Spring не делает объекта Аутентификации доступным как боб в контейнере, таким образом, нет никакого способа легко ввести или автосоединить его проводом из поля.

, Прежде чем мы начали использовать безопасность Spring, мы создадим ограниченный по объему сессией боб в контейнере, чтобы сохранить Принципал, ввести это в "AuthenticationService" (одиночный элемент) и затем ввести этот боб на другие службы, для которых было нужно знание текущего Принципала.

при реализации собственной услуги аутентификации Вы могли бы в основном сделать то же самое: создайте ограниченный по объему сессией боб с "основным" свойством, введите это в свою услугу аутентификации, сделайте, чтобы подлинный сервис установил свойство на успешном авторе и затем сделайте подлинный сервис доступным для других бобов, поскольку Вам нужен он.

я не чувствовал бы себя слишком плохо об использовании SecurityContextHolder. все же. Я знаю, что это - помехи / Singleton и что Spring препятствует использованию таких вещей, но их реализация заботится для поведения соответственно в зависимости от среды: ограниченный по объему сессией в контейнере Сервлета, ограниченном по объему потоком в тесте JUnit, и т.д. Реальный ограничивающий фактор Singleton - когда он обеспечивает реализацию, которая негибка к различным средам.

5
задан Simone Carletti 18 August 2009 в 12:58
поделиться

3 ответа

Просто выбросьте это - вашему демону должна потребоваться среда rails, с которой вы работаете. Он должен выглядеть примерно так:

RAILS_ENV = ARGV.first || ENV['RAILS_ENV'] || 'production'
require File.join('config', 'environment')

Таким образом вы можете указать среду, в которой вызывается демон.

Поскольку он запускает отложенное задание, скорее всего, демон уже это делает (ему нужна активная запись), но, возможно, вы только требуется минимальная активная запись для выполнения delayed_job без рельсов.

0
ответ дан 14 December 2019 в 01:13
поделиться

Hoptoad использует метод перехвата Rails rescue_action_in_public для перехвата исключений и их регистрации. Этот метод выполняется только тогда, когда запрос отправляется контроллером Rails. По этой причине Hoptoad полностью не осведомлен о каких-либо исключениях, созданных, например, задачами rake или сценарием / runner rails.

Если вы хотите, чтобы Hoptoad отслеживал ваше исключение, вы должны вручную интегрировать его. Это должно быть довольно просто. Следующий фрагмент кода демонстрирует, как вызывается Hoptoad

def rescue_action_in_public_with_hoptoad exception
  notify_hoptoad(exception) unless ignore?(exception) || ignore_user_agent?
  rescue_action_in_public_without_hoptoad(exception)
end

Просто включите библиотеку Hoptoad в свою среду и вызов notify_hoptoad (исключение) должен работать. Убедитесь, что ваша среда предоставляет тот же API, что и контроллер Rails, иначе Hoptoad может пожаловаться.

1
ответ дан 14 December 2019 в 01:13
поделиться

Проверьте исходный код Delayed :: Job ... там есть фрагмент вроде:

# This is a good hook if you need to report job processing errors in additional or different ways
def log_exception(error)
  logger.error "* [JOB] #{name} failed with #{error.class.name}: #{error.message} - #{attempts} failed attempts"
  logger.error(error)
end

Я не пробовал, но думаю, вы могли бы сделать что-то вроде:

class Delayed::Job
  def log_exception_with_hoptoad(error)
    log_exception_without_hoptoad(error)
    HoptoadNotifier.notify(error)
  end

  alias_method_chain :log_exception, :hoptoad
end
3
ответ дан 14 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: