PHP/Symfony: создание контекста приложения для Cron/Task

У меня есть длинная операция, которую я больше не могу запускать из пользовательского интерфейса, поскольку она превышает максимальное время выполнения, а также ограничение памяти. Я хорошо знаю, как я могу ставить задачи в таблице и выполнять cron sfTask, который завершает ожидающие задачи.

Может ли кто-нибудь сообщить мне следующее:

  1. Какие плагины PHP/Symfony лучше всего подходят для управления заданиями/задачами? Я не использую Zend и вижу, что sfTaskLoggerPlugin, sfGearmanPlugin и sfJobQueuePlugin давно не обновлялись.
  2. Как я могу создать контекст и сделать конфигурацию приложения, настройки и т. д. доступными для задачи?
  3. Как я могу добавить параметр в контекст, который методы могут читать, чтобы определить, были ли они вызваны cron/task или HTTP-запросом?

Все входы приветствуются.

PS: сослались на длинный скрипт в админке, задачу в Symfony? и немного других :)


person Prasad    schedule 25.05.2012    source источник


Ответы (1)


Я думаю, что большая часть того, что вам нужно, описана в стандартной документации.

http://www.symfony-project.org/cookbook/1_2/en/tasks

Я часто использую задачи Symfony через сценарии, которые передаются через задание cron. Я использую переключение среды через командную строку, как описано в документации. Я тоже использую передачу параметров.

Задачи Symfony очень мощные и дают вам все, что вам нужно от CLI, чтобы добраться до вашего приложения и выполнить то, что вам нужно.

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

person richrosa    schedule 25.05.2012
comment
спасибо друг, буду пробовать. Есть ли способ сообщить моей функции, что она выполняется внутри задачи? (в отличие от HTTP-запроса) - person Prasad; 25.05.2012
comment
Могу ли я также установить текущего пользователя в контексте? эмулировать, что задача выполняется для пользователя? - person Prasad; 25.05.2012
comment
Да обоим. Вы можете создать свою собственную среду для своих задач и контекст запроса, чтобы получить имя среды и использовать его в своей функции. Конечно, вы также можете передать ему параметр. Пока вы выполняете задачу, вы можете иметь доступ ко всему, что захотите. Вы можете вытащить пользовательский объект из sfGuardUser, если хотите. - person richrosa; 25.05.2012
comment
благодаря. Я следую вашему подходу, но может понадобиться помощь в пути. Я пытался войти в систему через $context-›getUser()-›signIn($guard_user, true); но получил ошибку: Обратите внимание: неопределенный индекс: REMOTE_ADDR в symfapp\plugins\sfDoctrineGuardPlugin\lib\user\sfGuardSecurityUser.class.php в строке 158 - возможно, там, где он пытается прочитать с $Server или что-то в этом роде. Каков выход, чтобы настроить пользователя в контексте? должен ли я установить его через $context-›factories['user']? я мог бы обойти некоторую логику? - person Prasad; 28.05.2012