Вызов плагина из cli (cron) Есть решение

Здравствуйте, коллеги, подскажите пожалуйста, как правильно?

создаём файл wa-apps/[APP_ID]/lib/cli/[APP_ID][ACTION_NAME].cli.php

<?php 
class mailCheckCli extends waCliController
{
    public function execute()
    {
        // здесь код который должен запуститься
    }
}

Так, вот, как вызвать здесь запуск плагина (Миграция на Webasyst) - модернизировали в синхронизацию остатков по YML формату, остальные функции поломали, т.к. уже перешли на Webasyst =)

То бишь надо запускать /wa-apps/shop/plugins/migrate/lib/actions/backend/shopMigratePluginBackendRun.controller.php как я понимаю? Или нет?

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

3 ответа

  • 1
    Eugen Nichikov Партнер-разработчик 2 февраля 2016 01:31 # Решение

    Файл

    /wa-apps/shop/plugins/migrate/lib/cli/shopMigratePluginBackendRun.cli.php


    Содержимое

    <?php 
    class shopMigratePluginBackendRunCli extends waCliController
    {
        public function execute()
        {
            $c = new shopMigratePluginBackendRunController();
            $c->execute();
        }
    }

    Чистим кэш :)


    Запускаем

    php cli.php shop migratePluginBackendRu
    • +1

      и в авторизацию не упрется? или авторизация только для экшенов актуальна?

      • +1

        У консольных команд нет авторизации.

        • +1

          это-то понятно... но мне казалось при вызове backend классов фреймворк насильно авторизацию проверяет.... ошибаюсь?

          • +1

            да :)

            Авторизация в бекенде срабатывает до создания инстанса контроллера. Методы:

            waSystem::dispatch()

            и

            waSystem::dispatchCli($argv)


            • +1
              Марк Марк Партнер-эксперт 2 февраля 2016 06:57 #

              Работает, однако не могу расфшифровать message. Тут, либо как все пишут вопрос в авторизации, либо правда нужно дальше ломать контроллер и убирать всё лишнее.

              Результат таков

              PHP Warning: XMLReader::read(): An Error Occured while reading in/wa-apps/shop/plugins/migrate/lib/transport/shopMigrateYmlTransport.class.php on line 807

              {"time":"0:00:00","processId":"56b093a0b7afd","stage":false,"progress":0,"ready":true,"count":{"productImage":null},"memory":"5.62MByte","memory_avg":"5.40MByte","stage_name":"Importing product images (this is the longest part, please be patient)...","stage_num":1,"stage_count":1,"current_count":"productImage":0},"processed_count":{"productImage":0},"report":"<div class=\"successmsg\"><i class=\"icon16 yes\"><\/i>Successfully imported (total time: 00 hr 00 min 00 sec)<\/div>"}

              Разбираюсь дальше

              • +2
                Алексей Алексей Webasyst 2 февраля 2016 07:04 #

                Судя по ошибке используется waLongActionController, который при долгих процессах запускает обращение за новой порцией данных. Но вот для CLI это не актуально т.к. у него нет обычно ограничений на время жизни скрипта - поэтому тут либо изменять дальше, либо проверять message до момента когда придёт положительный ответ и тогда уже передать XML.

    • +1
      Марк Марк Партнер-эксперт 2 февраля 2016 06:20 #

      У Вас опечатка в последней букве:

      php cli.php shop migratePluginBackendRun

  • 1

    нет.

    у консольных свои контроллеры и выполнить по расписанию обычный не выйдет

  • 1

    backend контроллер действительно из cli не вызовете. но если поломать правильно, т.е. в backend экшене оставить только интерфейс (если он у вас есть) а всю логику вынести в отдельный не backend класс, то вызывайте, почему нет.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите