Я пришел из среды PHP (по крайней мере, с точки зрения веб-разработчика) в прекрасный мир Ruby, поэтому у меня могут возникнуть некоторые глупые вопросы.Я предполагаю, что есть некоторые принципиально разные опции, доступные, когда не используется PHP.
В PHP мы используем memcache для хранения предупреждений, которые мы хотим отобразить в строке вверху страницы.Когда происходит что-то, генерирующее оповещение (например, о создании новой записи в блоге), скрипт cron, который запускается каждые 5 минут или около того, помещает эту информацию в memcache.
Теперь, когда пользователь посещает сайт, мызагляните в memcache, чтобы найти любые оповещения, которые они еще не отклонили, и мы их отображаем.
То, что я могу сделать по-другому в Rails, это обойти необходимость скрипта cron, итакже необходимо искать в memcache каждый запрос, используя Singleton и процесс опроса, выполняющийся в отдельном потоке для копирования из memcache в этот singleton.Теоретически это было бы более оптимизированным, чем проверка memcache один раз на запрос, а также инкапсулировать логику опроса в одном месте, а не разделять ее между задачей cron и логикой поиска.
Мой вопрос:Есть ли какие-то предостережения относительно наличия некоторого runloop в фоновом режиме, пока запущено приложение Rails?Я понимаю последствия многопоточности из Objective-C / Java, но я спрашиваю конкретно о среде Rails (3).
В основном что-то вроде:
class SiteAlertsMap < Hash
include Singleton
def initialize
super
begin_polling
end
# ... SNIP, any specific methods etc ...
private
def begin_polling
# Create some other Thread here, which polls at set intervals
end
end
Это подводит меняв похожий вопрос.Мы помещаем (зашифрованные) задачи в очередь SQS для вещей, связанных с электронной торговлей и для длительных фоновых задач.Для этого мы не используем cron, но у нас есть рабочий демон, написанный на PHP, который работает в фоновом режиме.Прямо сейчас, когда мы внедряем, мы должны выключить этого работника и запустить его заново с новой базы кода.В Rails можно ли как-нибудь запустить и остановить этот процесс на самом сервере rails (единорог)?Я не думаю, что это то, что я запускаю в главном процессе в отдельном потоке, так как мы часто хотим контролировать его как процесс сам по себе, но было бы неплохо, если бы он просто удобно запускался во время работы веб-приложения.