2009-04-05 2 views
2

Я хочу создать объект потока в environment.rb и использовать его в некоторых других действиях какого-либо контроллера.Как получить доступ к переменным, определенным в environment.rb в RoR?

Как мне это сделать?

Заранее спасибо.


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

ответ

0

Будьте очень осторожны с этим. Насколько я знаю, рельсы не являются потокобезопасными. И пытаясь безопасно использовать потоки перед лицом всей магии (извините, «мета-программирование»), это звучит рискованно, как и все.

Почему вы вообще хотите объект нити?

В ответ на комментарий, говорящие, что рельсы являются потокобезопасными might not mean as much as you think. Я, конечно, не могу рассчитывать на это, если мне это не понадобится.

+0

Rails был потокобезопасным с 2.2. –

3

Чтобы ответить на ваш первоначальный вопрос, константы, объявленные в environment.rb, доступны на всей кодовой базе. Избегайте делать это, если можете, хотя; это может стать конфигурацией спагетти довольно быстро.

Более широко, хотя Rails был (из того, что я понимаю) потокобезопасным с версии 2.2, потоки все еще довольно необычны - особенно в MRI - как способ обеспечить параллельную работу, а зеленые нити MRI в любом случае не особенно полезно. Подумайте об использовании очереди сообщений, например Starling, которая запустит другие процессы Ruby для выполнения асинхронной работы.

+0

Некоторые люди называют это потокобезопасным. Я бы не стал, по крайней мере, не в этом смысле. Слишком много угловых случаев. – MarkusQ

0

В дополнение к тому, что говорит Брайан, рассмотрите возможность использования инициализатора (введите в config/initializers для его выполнения). Я думаю, что это делает цель более понятной, чем использование environment.rb.

Смежные вопросы