Не запускается waCliController на сервере. Есть решение

На локалке все работает. Запускаю так
php D:\OpenServer\domains\localhost\cli.php shop ImportRests
Закинул файл shopImportRests.cli.php на сервер, там не запускается. Права такие же как и у остальных 644. Запускаю под пользователем под которым сервер запущен. Регистр букв у файла правильный.

Пробовал
php cli.php shop ImportRests
и
php [полный путь]/cli.php shop ImportRests
Версия php в консоли 5.3.27

Куда смотреть?

Результат всегда один. Кусок html с таким body

<pre>

<body>

<div id="wa-recovery">

<img id="wa-recovery-stretched-background" />

<div class="dialog width500px height300px" id="wa-recovery-dialog">

<div class="dialog-background"></div>

<div class="dialog-window">

<div class="dialog-content">

<div class="dialog-content-indent wa-500-error">

<h1>Error #404</h1>

<p>

<img src="[related path]/silver-mania.ru/wa-apps/shop/img/shop.png" /><br />

<span class="small">Shop</span>

</p>

<h2>The requested URL was not found on this server.</h2>

<p>Please contact app developer.</p>

</div>

</div>

</div>

</div>

</div>

</body>

</pre>

17 ответов

  • 1
    Леонид Вакуленко Webasyst 5 июля 2015 05:18 # Решение

    Думаю, что было дело в кеше автолоада. Когда добавляете новые классы, очищайте кеш в инталлере (или удаляйте подкаталоги wa-cache), иначе в не-дебаг режиме фреймворк эти новые классы не увидит.

  • 2
    BNP (Дмитрий) 25 августа 2020 15:26 #

    Как-то странно Вы запускаете. Правильнее будет вот так

    php /var/www/admin/data/www/auto-kan.ru/cli.php shop ImportcsvPlugin

    Ну и, разумеется, делать это надо под пользователем, под которым работает сайт.


  • 1

    Ну, пока что можно только сказать, что нечто в приложении Магазин кидает waException('...', 404). Например, такое может быть, если ваш контроллер пытается прочитать данные несуществующего контакта.

    Включите на сервере режим разработчика и попробуйте запустить CLI ещё раз. Сообщение об ошибке должно стать более полезным.

  • 1
    Евгений 5 июля 2015 04:07 #

    Вы будете смеяться но в режиме разработчика все заработало без проблем.

    Как так не могу с ходу понять.

  • 1
    Евгений 5 июля 2015 04:08 #

    Кстати, спасибо за совет.

  • 1
    Евгений 5 июля 2015 04:12 #

    Чему тут глючить то ?

    <?php

    class shopImportRestsCli extends waCliController

    {
    public function execute()

    {

    $skus = json_decode(file_get_contents("http://xxx/getrests.php"));

    if (!isset($skus) || $skus == 0)

    return;

    $psm = new shopProductSkusModel();

    foreach ($skus as $sku=>$count){

    $psm->updateByField('sku', $sku, array(

    'available' => 1,

    'count' => $count

    ));

    }

    $pm = new shopProductModel();

    $pm->correctCount();

    }

    }

  • 1
    Евгений 5 июля 2015 05:00 #

    Опять отключил дебаг - все работает. В чем было дело не разобрался.

  • 1

    Подскажите в чем может быть причина:

    Запускаю с командной строки в ISP Manager

    php /var/www/admin/data/www/auto-kan.ru/wa-apps/shop/plugins/importcsv/lib/cli/shopImportcsvPlugin.cli.php

    Далее выдает ошибку: 

    PHP Fatal error:  Class 'waCliController' not found in /var/www/admin/data/www/auto-kan.ru/wa-apps/shop/plugins/importcsv/lib/cli/shopImportcsvPlugin.cli.php on line 4
    Вот код плагина (написан для импорта товаров из csv:

    <?php
    class shopImportcsvPluginCli extends waCliController
    {
    public function execute()
    {
    @set_time_limit(0);
    $start = microtime(true);
    $file = $this->getFile();
    if(!$file) {
    return;
    }
    $fh = fopen($file, 'r');
    $row = fgets($fh);
    $encoding = wa()->getPlugin('importcsv')->getSettings('encoding');
    if($this->parseHeaderRow($row, $encoding)) {
    $item = new shopImportcsvPluginItem();
    /**
    * @todo Можно что-то сделать с доступными товарами. Например, отключить те, которых в файле нет.
    */
    $avail_ids = $this->getProducts($fh, $encoding, $item);
    $pm = new shopProductModel();
    $pm->correctCount();
    $cm = new shopCategoryModel();
    $cm->repair();
    $cm->recount();
    $fm = new shopFeatureModel();
    $fm->recount();
    $st = new shopTypeModel();
    $st->recount();
    $tm = new shopTagModel();
    $tm->recount();
    }
    fclose($fh);
    if(($path = wa()->getPlugin('importcsv')->getSettings('upload_file_path_done')) && is_writable($path)) {
    waFiles::move($file, rtrim($path, '/\\'). '/' . basename($file));
    } else {
    waFiles::delete($file);
    }
    echo microtime(true) - $start, "\n";
    }
    /**
    * @param resource $fh
    * @param string $encoding
    * @param shopImportcsvPluginItem $item
    * @return array
    */
    private function getProducts($fh, $encoding, $item)
    {
    $i = 0;
    $start100 = microtime(true);
    $avail_ids = array();
    while($data = fgetcsv($fh, null, ';')) {
    if ($encoding != 'UTF-8') {
    $data2 = array();
    foreach ($data as $d) {
    $data2[] = mb_convert_encoding($d, 'UTF-8', $encoding);
    }
    $data = $data2;
    unset($data2);
    unset($d);
    }
    $i++;
    try {
    if ($product_id = $item->save($data)) {
    $avail_ids[$product_id] = 1;
    }
    } catch (waException $e) {
    echo 'row#', $i, ' error ', $e->getMessage(), "\n";
    waLog::log('row#' . $i . ' error ' . $e->getMessage());
    var_dump($e->getTraceAsString());
    }
    if ($i % 100 == 0) {
    echo $i, "\t", microtime(true) - $start100, "\t", memory_get_usage(), "\n";
    $start100 = microtime(true);
    }
    }
    $avail_ids = array_keys($avail_ids);
    return $avail_ids;
    }
    protected function getPath()
    {
    static $path;
    if($path === null) {
    $path = wa()->getDataPath('import/files/', true, 'site');
    rtrim($path, '/\\');
    }
    return $path;
    }
    private function getFile()
    {
    $path = wa()->getPlugin('importcsv')->getSettings('upload_file_path');
    $path = rtrim($path, '/\\').'/';
    if(!is_dir($path) || !is_readable($path)) {
    waLog::log('Не удаётся открыть директорию "'.$path.'"', 'importcsvPlugin.log');
    return false;
    }
    $files = glob($path."*.csv");
    asort($files);
    $filename = reset($files);
    if(!$filename) {
    //waLog::log('Нет файла для обновления', 'importcsvPlugin.log');
    return false;
    }
    if(!is_readable($filename)) {
    waLog::log('Не удаётся открыть файл '.basename($filename), 'importcsvPlugin.log');
    return false;
    }
    return $filename;
    }
    private function parseHeaderRow($row, $encoding)
    {
    $headers = true;
    try {
    if($encoding != 'UTF-8')
    $row = mb_convert_encoding($row, 'UTF-8', $encoding);
    shopImportcsvPluginHeaders::parse($row);
    } catch(waException $e) {
    echo $e->getMessage(), "\n";
    $headers = false;
    }
    if(!$headers && ($encoding != 'UTF-8')) {
    try {
    shopImportcsvPluginHeaders::parse($row);
    } catch (waException $e) {
    echo $e->getMessage(), "\n";
    $headers = false;
    }
    }
    return $headers;
    }
    }


    ----------------------------

    Кэш чистил, debug включал отключал

    Спасибо!

  • 1
    Евгений 25 августа 2020 13:08 #

    у вас в путь php /var/www/admin/data/www/auto-kan.ru/wa-apps/shop/plugins/importcsv/lib/cli/shopImportcsvPlugin.cli.php затесались не нужные папки plugins/importcsv/

    попробуйте php /var/www/admin/data/www/auto-kan.ru/wa-apps/shop/lib/cli/shopImportcsvPlugin.cli.php

  • 1

    Евгений он лежит по этому пути.

    По вашему методу выдает: 

    Could not open input file: /var/www/admin/data/www/auto-kan.ru/wa-apps/shop/lib/cli/shopImportcsvPlugin.cli.php
    
    Тут как я понимаю проблема в самом waCliController
    Хотя раньше все работало отлично.
    Уже не знаю куда капать 
  • 1

    Может дело в правах или как то правильно его надо запускать с какими то правами? Я не особый специалист в этих делах.

  • 1
    Евгений 25 августа 2020 14:26 #

    А может просто Shop Cli должен лежать в стандартном для него месте (\wa-apps\shop\lib\cli) а не в том где вы придумали?

  • 1

    Вот всего что там лежит:

    До переезда из виртуального хостинга на выделенный все работало. Может есть какой нибудь другой способ проверить, или запустить бесплатный какой нибудь плагин с waCliController ?

    Админка у самого плагина работает нормально.

    Какие именно файлы нужно перенести в директорию которую вы предложили чтобы проверить? 

    shopImportcsvPlugin.cli.php ?
  • 1

    Сложно конечно. Но буду разбираться, вариантов нет.

    Спасибо!

  • 1

    Да спасибо!

    Выдал следующее:

    root# php /var/www/admin/data/www/auto-kan.ru/cli.php shop ImportcsvPlugin 
    100    0.4004020690918            7254976 
    200    0.17776203155518    7255264 
    300    0.24868321418762    7524184 
    400    0.21606802940369    7524248
    

    и т.д. Что это значит не подскажите? Я так понимаю это количество обработанных строк из csv и время выполнения? Думаю это правильно, просто плагин писали без меня.

    Спасибо огромное! Все работает!

    • +1
      BNP (Дмитрий) BNP (Дмитрий) 25 августа 2020 17:18 #

      Что значит этот вывод - это уже надо в код класса вникать. Думаю это Вы сами уже сможете =)

      Ну и еще раз. Если у Вас сайт работает не под рутом (а так и должно быть), НЕ НАДО запускать задания под рутом. Это в дальнейшем может привести к проблеме с правами на папки и, соответственно, к проблемам в работе сайта.

      • +1

        Понял, вот потихоньку и начинаю вникать. Не так давно занялся ShopScript`ом.

        Буду запускать под пользователем под которым работает сайт.

        Спасибо Дмитрий! Всех благ!

        • +1
          Eugen Nichikov Eugen Nichikov 26 августа 2020 09:00 #

          P.S.

          потихоньку и начинаю вникать

          Начинать вникать лучше в новой теме на форуме, а не поднимать темы прошлого десятилетия ;)

    • +1
      Eugen Nichikov Eugen Nichikov 26 августа 2020 08:59 #

      Плагин писал я) Да, это отладочная информация по импорту сотни товаров. Номер сотни, время и потребляемая память.

  • 1

    Плагин насколько я знаю писал мой сосед вроде как. Но не суть может ошибаюсь. Евген буду иметь ввиду если нужно будет доработать маленько под наш прайс. Почему то при импорте товаров через ваш плагин товар не попадает в категории. В чем может быть причина? Могу выложить csv файл.

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

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