#magento #admin
#магенто #администратор #magento
Вопрос:
У меня есть свой собственный контроллер в Magento, который был выполнен, следуя приведенным здесь рекомендациям:http://alanstorm.com/magento_admin_controllers
Мой контроллер расширяет Mage_Adminhtml_Controller_Action, и внутри есть метод:
public function myAction() {
sleep(1000);
die('I am done');
}
Когда этот метод запущен, я не могу загрузить какие-либо другие страницы администратора Magento. В конечном итоге они загрузятся сразу после завершения описанного выше метода.
Кроме того, интерфейс работает нормально, выполнение того же самого действия с контроллера интерфейса не приводит к зависанию Magento подобным образом.
Есть какие-нибудь решения, чтобы сохранить мой метод в Admin, и пока этот метод запущен, остальная часть admin должна оставаться доступной? Самое длительное время выполнения этого процесса составляет около 4-5 часов, и он импортирует продукты. Да, у меня также настроен cron, но я хотел бы предоставить пользователю возможность инициализировать процессы по своему усмотрению.
Ответ №1:
Это особенность.
Обходной путь заключается в использовании двух браузеров, например Firefox Chrome, Firefox Opera и так далее.
Для выполнения этих задач лучше использовать два браузера, так как вы не хотите, чтобы сбой в других вкладках прерывал ваш импорт.
Я знаю, что это не углубленный программный ответ, хотя иногда боковое решение работает.
Комментарии:
1. Да, из другого браузера это работает, но какая часть кода проверяет это? Я вызываю метод с помощью fsockopen и передаю ему файл cookie adminhtml. Я пытался передать какую-то другую строку пользовательского агента, но, похоже, это не решает проблему. Кто-нибудь знает, в какой части кода выполняется эта «проверка браузера»?
2. Вы можете попросить cron вызвать ваш контроллер, я запускаю cron каждые две минуты, это то, что у меня есть, я также добавляю сетку администратора и обновляю записи прайс-листа с ‘new’ на ‘processing’ на ‘aborted’ или ‘processed’ в зависимости от того, как это работает. Таким образом, пользователь может проверять свои обновления.
3. Может быть, я могу вызвать какую-нибудь функцию, чтобы заставить Magento думать, что метод long уже отправлен? Существует ли какой-либо такой метод?
Ответ №2:
Должен ответить на это сам:
Решение мега простое:
вызовите это прямо перед длительным процессом (убедитесь, что вы выполнили манипуляции с данными сеанса перед вызовом этого метода, иначе могут возникнуть ошибки)
session_write_close();
И вуаля, вы можете запускать несколько процессов одновременно!