0

У меня есть модель пользователя, и я установка значения в потокеДоступ значения во всех потоках в приложении рельсов

Thread.current[:partner_domain] = "example.com" 

я в состоянии получить доступ к этому в модели, но не в замедленном рабочем задании, а он работает в отдельном потоке, я не могу сохранить этот домен в своей базе данных из-за некоторых бизнес-требований.

Чтобы быть более ясно, я использую Thread.current[:partner_domain] в динамически созданный метод, который в настоящее время вызывается задержкой работы работника

Пожалуйста, помогите мне с этим.

+0

Глобальное состояние FTW! Нет, не делай этого. Или делайте это на свой страх и риск, если вы знаете, что делаете. – bsvin33t

+0

@ bsvin33t как бороться с такими вещами, можете ли вы опубликовать ответ? –

+0

У меня есть другой вопрос, не можете ли вы просто использовать что-то вроде redis для сохранения ценности? – bsvin33t

ответ

0

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

4

Многопоточность не имеет к этому никакого отношения. Работник DelayedJob работает в отдельном процессе и, как таковой, не имеет ничего общего с процессом сервера rails. Не потоки, не память, ничего.

Правильная вещь - это собрать все данные, необходимые задаче в своих аргументах. Что-то вроде этого:

MyClass.delay.do_action(primary_data, options) 

Где options содержать доменное имя партнера и все остальные данные. Затем задание просто обращается к информации из аргументов.