shaks
@shaks

Как получить доступ к request окружению из модели?

Цепочка следующая:

Bitcoind, при поступлении средств или же при первом подтверждении транзакции, посредством walletnotify дергает rake задачу. Та в свою очередь выполняет ряд действий с моделями базы данных. На одной из модели стоит колбек after_commit который создает оповещение ActionCable.broadcast.

Канал, который обрабатывает данное оповещение рендерит партиалы и раздает их подписчикам посредством ApplicationController.render. И все бы ничего, но партиалы содержат хелперы, которые задействуют request.env, а именно - devise (через pundit, но не суть). И от этого никуда не деться.
Ошибка выглядит следующим образом:

ActionView::Template::Error: Devise could not find the `Warden::Proxy` instance on your request environment.
Make sure that your application is loading Devise and Warden as expected and that the `Warden::Manager` middleware is present in your middleware stack.
If you are seeing this on one of your tests, ensure that your tests are either executing the Rails middleware stack or that your tests are using the `Devise::Test::ControllerHelpers` module to inject the `request.env['warden']` object for you


Я нагуглил идентичную проблему, описанную в исьюсах девайса на гитхабе, вот здесь - https://github.com/plataformatec/devise/issues/4271

В ответ, привели две ссылки, вот эти:
https://evilmartians.com/chronicles/new-feature-in...
www.thegreatcodeadventure.com/using-action-control...

Проблема в том, что я никак не могу получить request.env, а соответственно и env['warden'] для того чтобы вскормить вручную его ApplicationController.renderer.new

Нужна помощь, самому разобраться не получилось (
  • Вопрос задан
  • 327 просмотров
Пригласить эксперта
Ответы на вопрос 1
Я бы посоветовал переписать соответствующие partial с учётом того факта, что у вас может не быть доступа к request.

Условно говоря, "if devise_available? && user_signed_in?", а в devise_available напишите код что-то типа request.present?

Тогда шаблоны будут корректно работать в обычном веб режиме и при запуске через Rake.

Либо необходимо гуглить как мокают Devise в тестах, так как у тестов и у Rake есть общие черты — отсутствие request.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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