Запускаем MODX Revolution на БД SqLite3

Всем доброго дня.

В результате выкатываю на гитхаб практически рабочее решение. Ссылка на него в конце статьи.

История
Основой для создания и модернизации возможности работы с sqlite выступил репозиторий пользователя RTOSkit. Он создал форк и возможность работы с sqlite MODX Revo 2.2.5. github.com/RTOSkit/revolution

Как он писал на форуме — много дебажил и работал, за что ему огромное спасибо! Т.к. без его участия я бы врятли воскресил эту возможность.
Скачав его форк — почти все заработало на 2.2.5, но создание TV, чанков и сниппетов, плагинов не работало — ошибка дубля имени при создании.
Так же программист писал на форуме modx, что нельзя скачать и устанавливать пакеты в менеджрере пакетов. (Оно и понятно почему — ниже об этом расскажу подробнее).
В общем, работа проделалась RTOSkit отличная, но проект стоит на месте уже 8 лет. Да и сам разработчик перестал в репо появляться вообще.

Что сделал и нюансы:
Исходных файлов которые к замене — не нашел в репозитории RTOSkit, поэтому выкачал промежуточную версию Revo и тупо сравнивал и отсеивал файлы которые не не нужны. Протестировал на версии 2.3.0 и 2.6.5 работу — установилась, но верхняя панель админа — исчезла и куча ошибок в логах, а что-то не сохранялось и что-то не отображалось.
В течении долгого времени Сравнивал файлы mysql и sqlite. И добился запуска установки без ошибок на 2.6.5. но по прежнему не создавались ТВ и чанки, сниппеты, так же нельзя было у ресурса изменить шаблон — при перезагрузке страницы шаблон не менялся. Так же не отображались категории системных настроек, по которым фильтруются разделы, и было много ошибок в логах.
Печально и то, что нельзя было установить пакеты из репозитория сразу, приходилось устанавливать их локально — загрузив в папку установки. При установке писалась ошибка записи в БД с пакетами. ошибки namespace и прочее.
Предстояло пошагово дебажить каждый файл отличающийся от оригинала в mysql версии. + смотреть оригиналы классов от которых было наследование. Попутно поправив еще процессоры MODX чутка. И в результате пары недель моего сумасшедшего энтузиазма и нехватки опыта, опуская подробности, все заработало, кроме корректной установки пакетов. Пакеты как бы устанавливаются, просто не все и не все корректно.
Дело в том что у каждого компонента, если он создает свою БД имеются свои классы и схема, которая описывает работу с БД причем естественно это только mysql, а вот папочки sqlite с подходящим набором нет.
По этому у меня без проблем ставились такие дополнения как pdoTools (кстати феном прекрасно работает), translit, Ace, Tiny (но на 2.7.3. была какая-то ошибка, но после установки все работало, вроде). Думаю все допы у которых нет привязки к БД — установятся и будут работать нормально.
Так что для того чтобы заработал тот же FormIt — нужно для него создать модели для sqlite. Этим я хочу заняться в перспективе и несколько дополнений для себя перевести в sqlite режим (formit, migx, collections например).
Важный момент почему форк сделан не из прямого репозитория — дело в том что для работы sqlite пришлось в паре мест скорректировать код оригинального MODX. К тому же из-за того что дополнения в репозиториях и сам репозиторий работают с mysql то выкачать их — не возможно т.к. запрос на пакеты в репо идет с запросом дать список всех дополнений которые поддерживают sqlite, естественно там 0 записей.
Поэтому я в запросе заменил умышлено sqlite на mysql и в результате получил работающий загрузчик Пакетов. Но это костыль, который нужен временно (хотя учитывая интерес к sqlite, он скорее всего будет постоянным).
Не все ошибки удалось устранить, но уже можно, думаю на sqlite собирать небольшие сайтики типа лендингов, визиток и тестировать.

Хотите использовать Пакеты?
Для пакетов которые используют БД mysql — нужно создать модели для xpdo в sqlite, чтобы дополнение установилось корректно, иначе вы получите кучу ошибок о не возможности найти модели БД для своего Пакета и как следствие система создать таблицы не сможет.
Примеры моделей — опять таки исходники которые лежат в public_html папке репозитория. ориентируйтесь на mysql при создании, там они почти 1 в 1.
Включите логи сервера и модикса на нужном вам уровне.

Пул реквесты в оригинальный репозиторий MODX, считаю пока излишними, т.к. еще есть ошибки и нет хорошего тестирования и 100% гарантии что все будет хорошо, да и вообще надежд что примут его — нет. Я больше пессимист в этом плане. Если вы пришлете PR — будет круто! Найдете косяк — пишите!
На данный момент работает система php 5.6+ c поддержкой sqlite3, revo 2.6.5+. (проверена на php 7.3 и revo 2.7.3.
Пока есть баг с TV в шаблоне при сохранении для revo 2.7.3 (галочки как бы отмечены что TV присвоены шаблону, но на самом деле надо перекликнуть их и сохранить шаблон).
О нагрузке скажу лишь пару слов — т.к. это файловая БД, то не рассчитывайте на супер скорость. Пока система не обработает один запрос — ко второму не перейдет.

Надеюсь, что кому-нибудь пригодиться подобная версия MODX без mysql. Уже более крепкая и рабочая.
Успехов!

UDP 2020.06.04: Области и варианты применения:
— Лендинги
— Сайты визитки и персональные странички.
— Можно установить на домашний сервер или роутер для каких-то задач.
— Установка сколь угодно большого кол-ва сайтов на под-доменах или директориях для демо-режимов. Это, возможно, будет интересно больше разработчикам.

UDP 2020.06.09: Сейчас пробую делать проект на уже рабочем сайте с sqlite. (На гитхаб еще не выкладывал коррекции). Проверил работу с дописыванием схемы БД для Sqlite. Пакеты которые проверились и работают:
— translit, Ace, Tiny Rich Text, pdoTools,Babel, AjaxForm — ставятся без коррекций на прямую.
— ClientConfig, Collections, FormIt, MIGX, phpThumbOn — была добавлена схема и Пакет установился и заработал.

UDP 2020.07.01: Обновлены файлы на github актуальные версии. Исправлено много ошибок и неточностей.

P.S. ссылка на гитхаб: github.com/Alexij2/sqlite_revolution
P.S.#2 Сделал PR в оригинальный репозиторий revolution. Говорят, возможно помогут чем смогут внедрением. Ну, посмотрим.
Алексей Смирнов
30 мая 2020, 17:26
modx.pro
622
+12

Комментарии: 14

Alexander V
03 июня 2020, 20:07
+3
Зачем это вообще надо? Чем не устраивает MySQL?
    Алексей Смирнов
    03 июня 2020, 21:55
    +1
    Область применения с ходу:
    1. Дешевый хостинг без MYSQL.
    2. Лендинги, визитки и простые низконагруженные сайты.
      Alexander V
      03 июня 2020, 21:59
      +3
      Аргументы десятилетней давности.
        Евгений Шеронов
        04 июня 2020, 03:29
        +2
        Вот я тоже задавался вопросом «а зачем?».

        Судя по github экономией тут не пахнет)
        В результате пары недель ...
        Стоимость пары недель любого разработчика — это годы для хостинга c MySQL)

        Мало того, что схему нужно добавлять, так ещё в дополнениях бывают подготовленные запросы не через XPDO, и вполне может быть отличный синтаксис запросов. Так что и код править может придётся.
        По мне такой путь точно в никуда.

        Я бы ещё понял использование SQLite на сайте для какого-то внутреннего локального использования, где будет только 1 человек пользоваться сайтом.

        Вот например, поддержка PostgreSQL принесла бы больше пользы. Но здесь будет проблема в том, что shared-хостингов с постгресом сильно меньше, следовательно поставить не у каждого получится.
        Ну и некоторые решения могли бы сильно от БД зависеть, например от типов данных.

        Так что сейчас даже хорошо, что в MODX все используют MySQL, всё легко перенести, не нужно вникать в другие БД, где их искать, как подключаться и т.д.

        Хотя и с MySQL то можно много улучшать, добавлять поддержку новых типов, массивы, JSON.
        Но под это дело простые шаред хостинги уже не успевают обновлять MySQL, но это уже другая тема)
          Алексей Смирнов
          04 июня 2020, 22:24
          0
          Стоимость пары недель любого разработчика — это годы для хостинга c MySQL)
          Точно. Но не вы же их потратили.
          Мало того, что схему нужно добавлять, так ещё в дополнениях бывают подготовленные запросы не через XPDO, и вполне может быть отличный синтаксис запросов. Так что и код править может придётся.
          Sqlite3 спокойно понимает PDO и работает через него не хуже чем через xpdo. Конечно, есть свои мелкие нюансы, но когда мы их встречаем это немого другой уровень проекта. Да и потом, человек который выбрал sqlite явно понимает что делает…
          Я бы ещё понял использование SQLite на сайте для какого-то внутреннего локального использования, где будет только 1 человек пользоваться сайтом.
          Если бы внимательно читали статью, то увидели что я как бы прямо и говорю о том что данный подход для мелких сайтов. Да, и никто не заставляет вас пользоваться решением. А тест драйв, может когда-нибудь проделаю для интереса.
          Так что сейчас даже хорошо, что в MODX все используют MySQL, всё легко перенести, не нужно вникать в другие БД, где их искать, как подключаться и т.д.
          Замечу что ничего искать не нужно, достаточно для php расширения sqlite3, которое есть практически везде. Да и подключение у MODX стандартное — просто берешь и используешь.

          И вообще, я вижу комментарии только от представителей хостинг компаний. Сообщаю, что в некоторых странах есть еще хостинг без Mysql и он частенько дешевле следующего тарифа в 2 раза. Поэтому область применения данного решения пусть останется на усмотрение программиста, который непосредственно делает сайт.
            Alexander V
            05 июня 2020, 10:33
            0
            Полно бесплатных хостингов с MySQL
              Алексей Смирнов
              05 июня 2020, 11:45
              +1
              Я не ставил в статье целью обсуждать хостинги и их возможности. Это тема немного другая, если вы не заметили. И в РБ нет таких бесплатных хостингов, например.
              Если есть что сказать по теме, увидели ошибки в решении — пожалуйста. А мусолить мускул, думаю, излишне.
                Alexander V
                05 июня 2020, 11:52
                0
                Вам уже не только я говорю, что это нецелесообразно.
        Алексей
        04 июня 2020, 08:59
        0
        на домашнем роутере можно запустить будет, этож да
    Димыч
    05 июня 2020, 02:38
    +2
    Сизифов труд, простите за откровенность. Области применения надуманные.

    Сообщаю, что в некоторых странах есть еще хостинг без Mysql и он частенько дешевле следующего тарифа в 2 раза.

    Предлагаю еще без php сделать версию, такие хостинги еще дешевле.
      Василий Наумкин
      05 июня 2020, 04:52
      +4
      Как-бы сам по себе PDO — это:
      PHP Data Objects — расширение для PHP, предоставляющее разработчику простой и универсальный интерфейс для доступа к различным базам данных.
      Почему-то для Eloquent не считается зазорным поддерживать SQLite, а вот для xPDO — сизифов труд.

      Лично я использую SQLite в своей библиотеке для автоматического тестирования в Trevis, это проще и быстрее, чем поднимать MySQL.
      Алексей Смирнов
      08 июля 2020, 12:34
      0
      После установки pdoTools, если используется pdoCrumbs, то он ломает сайт (вылетает с ошибкой подготовки запроса к БД).
      Лечится сниппет pdoCrumbs следующим образом:
      1. Копируем родной pdoCrumbs в новое название pdoCrumbs2.
      2. в снипете pdoCrumbs2 коментируем 2 строки и добавляем сопоставление:
      (чтобы получилось так: joxi.ru/krDlZYdhK9BZ0r )
      Код для копипаста.
      $nrows = [];
      foreach($ids as $iduho){
          foreach($rows as $line){
              if($iduho == $line['id'])    {
                  $nrows[] = $line;
              }
          }
      }
      $rows = $nrows;
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        14