ForUpdate
должен быть StatementExpressionList
, то есть список StatementExpression
с.
i+2
является выражением, но не выражением оператора.
Выражения операторов можно неофициально (*) рассматривать как выражения, которые могут иметь побочный эффект, и, таким образом, для них имеет смысл оставаться в выражении самостоятельно i+2
не имеет побочного эффекта, поэтому нет смысла оценивать его.
(*) Неофициально, потому что method1() + method2()
может иметь побочный эффект, потому что methodN()
может иметь побочный эффект; и тем не менее, это не выражение выражения, потому что «основное» выражение здесь - сложение - само по себе не имеет побочных эффектов.
Вы могли бы написать это как for (;; method1(), method2()) { ... }
(без добавления), если это было то, что вы хотели в вашем ForUpdate
.
Ryan Bates создал три больших скринкаста, которые могли бы действительно помочь Вам:
Он говорит о различных за и против для использования каждого. Это должно помочь Вам начать.
Это зависит от Ваших потребностей.
Испытайте delayed_job, который был создан Tobi delayed_job (последнее обновление 2011), основатель Shopify.
Существуют ветвления DHH deleayed_job (последнее обновление 2008), и collectiveidea delayed_job (последнее обновление 20 дней назад с 28.06.2018).
Я обычно полагаюсь на cronjob, планирующий, поскольку он дает гибкость, не имея необходимость писать отдельный код для планирования его. Что-либо, что может быть выполнено от оболочки, может быть запланировано! Будьте этим любой сценарий (рубин / задача граблей / py / удар / любой другой, которого Вы любите), cronjob планирование может быть легко достигнут.
При работе окон можно использовать запланированные задачи
Надеюсь, это поможет.
async_observer является лучшим. Это не делает всех видов немого материала активного ожидания или теряет задания на катастрофических отказах рабочего как скворец, никакой опрос DB, и т.д...., и это интегрируется в направляющие замечательно хорошо.
Я продвигаю тонны заданий через него, и это в значительной степени не заботится.
Большинство плагинов, которые были упомянуты, сделает задание, но если все, в чем Вы нуждаетесь, является задачей Граблей, работает на расписании набора, затем нет действительно никакой потребности начать бросать больше архитектуры в него.
Просто добавьте задание крона, которое выполняется
"CD/path/to/rails/app; RAILS_ENV=production обстреливают run:my:task"
Почему изобретают велосипед, когда Unix как операционные системы был выполняющимися задачами в расписании в течение многих десятилетий?
В то время как я не знаю, становится ли это стандартом, я имел большой успех с BackgroundRB. У меня есть несколько рабочих, некоторые - длительные задачи, инициированные пользовательским действием, в то время как другие запускаются в расписании.
Взгляните на Taskr. Это в основном похоже на крон, но с УСПОКОИТЕЛЬНЫМ веб-интерфейсом. Можно использовать его для планирования задач периодически соединиться с приложением для направляющих и инициировать произвольный код (через плагин Taskr4rails). Это предназначено для установки приятно системе, созданной вокруг УСПОКОИТЕЛЬНЫХ сервисов, плюс он может уведомить Вас, если задача возвращает ошибку, не удается работать и т.д.