PHP Storm вместо консоли для MODX

Брюзжание о заметке-ссылке


Сразу извинюсь за то, что вместо полноценной заметки это скорее заметка-ссылка, но на то есть несколько причин. Первая и главная — это дурацкий редактор заметок на сайте, который отбивает всякое желание писать эти самые заметки. Возможно я брюзжу, но последние годы я привык писать тексты в markdown, где все крайне логично как на этапе написания текста, так и после, когда он уже преобразован в html. Здесь же стоит типограф Jevix, который бесит и заставляет заметку редактировать по 10 минут, пока она не станет нормально выглядеть.

Ну и другая причина кроется в том, что у меня есть свой сайт, где мне хотелось бы публиковать свои заметки и мне конечно же хочется, чтобы их читали именно там. Но дело в том, что на modx.pro нет возможности указать cannonical на оригинальный текст, чтобы поисковые системы правильно понимали, где оригинальное содержимое.

Звучит, будто жалуюсь, но этим хочу подтолкнуть сообщество и ребят, которые стоят за сайтом, обратить внимание на проблему и решить ее. Теперь же давайте к сути. Здесь в заметке будет вступление, а по ссылке уже все подробности. Не обессудьте.

О проблемах запуска скриптов


Итак, заметка о том, как настроить PHP Storm, чтобы не выходя из IDE, писать и запускать скрипты, которые работают с MODX прямо на удаленном сервере. По сути, как заменить дополнение Console нормальным инструментом для работы с кодом, где есть автоматические дополнения, инспекции и вообще вся мощь IDE.

Понадобилось мне тут недавно написать один скрипт для импорта данных из API в MODX. Сам скрипт можно написать и локально, это обычно трудностей не вызывает, но сайт уже рабочий и мне нужно было иметь доступ к объектам MODX, чтобы их обновлять или создавать, в зависимости от ситуации.

В целом, решений для запуска кода в MODX хватает. Можно написать снипет и вызывать его где-то на странице. Можно установить дополнение Console или modalConsole, и запускать свой скрипт там. Так будет даже правильнее, чем через снипет. Но это всё работает через web-server, т.е. подходит для небольших скриптов, которые выполняются за отведённые стандартные 30 секунд. Для полноценного CLI-приложения не годится. Особенно, если мы говорим об импорте, который может работать и десятки минут, если задачи тяжелые. Для тяжелых задач правильнее использовать очереди, конечно же, но у нас MODX и несмотря на то, что очереди в MODX есть, работать с ними умеет не каждый.

Другая проблема заключается в том, что несмотря на существование Ace, в браузерных редакторах никогда не будет той мощи, которую дает полноценная IDE. Это проверки качества кода и умные инспекции, автоматическое дополнение и другие удобства. Я обычно пишу код в PHP Storm, поэтому решил, что потратить немного времени и настроить один раз IDE (и рассказать об этом в заметке) будет эффективнее, чем страдать с другими инструментами.

Рассказывать я буду на примере сайта, размещенного на хостинге modhost.pro, но подход можно применять на любом хостинге, где есть доступ по SSH. Файлы скопировать хватит и FTP, но чтобы запускать CLI-приложение, без SSH не обойтись. Так же я работаю на macOS, поэтому на других операционных системах некоторые комбинации клавиш или настройки путей могут быть иными, но я думаю, разберётесь.

В целом, схема получается следующая. Мы пишем код в IDE, он должен каким-то образом попасть на сервер, а после этого нам нужно этот код запустить из той же IDE. Одного инструмента для реализации такого порядка нет, но связка из нескольких позволяет так сделать. Итого, у нас имеется две проблемы, которые необходимо решить: автоматически доставить код на сервер после изменений и выполнить его на удаленном сервере. Начнем с автоматической доставки.

Продолжение тут → klimchuk.by/notes/php-storm-console-for-modx/

P.S. Вступление я писал давно, но относительно недавно, откликнувшись на клич @Иван Бочкарев помочь с обновлением сайта сообщества, т.е. этого — modx.pro, я одну из проблем, озвученных в заметке, уже решил. Pell request с добавлением поля для указания canonical не покажу, так как репозиторий приватный, тем не менее код ожидает проверки и надеюсь, в скором времени будет загружен на сайт. Глядишь, дойдут руки и вторую решить, тогда совсем хорошо заживем.
Іван Клімчук
01 ноября 2021, 09:19
modx.pro
1 303
+19

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

Николай Савин
02 ноября 2021, 16:54
+1
Сходил по ссылке, почитал, отметил для себя новые вещи.
1. Я не знал что можно задавать удаленный интерпретатор php
2. В принципе не знал об удаленном исполнении PHP без запуска SSH сессии

Иван — пиши еще об инструментарии разработки и полезных штуках phpStrorm! Очень интересно и познавательно.
Вот тебе идея для следующей заметки — расскажи о подключении к удаленной базе данных из шторма. Уверен не все про это знают и возьмут на вооружение.
    Іван Клімчук
    02 ноября 2021, 16:58
    0
    По пункту 2 — это как раз и есть подключение к SSH сессии, просто это делается посредством самой IDE.
    Насчет подключения к БД и писать особо нечего, там же все просто достаточно. Точно так же можно настроить вход по ssh и подключаться, даже если БД не торчит наружу портами. Но коротко можно и пояснить, в принципе.
    Александр Мельник
    02 ноября 2021, 17:25
    0
    А я очень полюбил работать с VSCode после того, как туда добавили полноценную работу через SSH.
    Очень раздражало в phpstorm необходимость настраивать этот автоматический деплой, выкачивать файлы к себе локально.
    VSCode может подключиться к серверу по ssh, что решает следующие проблемы
    — редактор запускается на сервере, на вашем локальном компьютере вы видите лишь внешний интерфейс
    — сохранение файла сразу сохраняет его на сервере, нет никаких сохранил локально, передал на сервер
    — терминал в редакторе это теперь терминал сервера, то есть вы работаете не с локальным интерпретатором php, а с серверным
    — не нужно выкачивать иногда гигабайты файлов с работающего сайта себе на компьютер
    — поскольку мы теперь на сервере, нам доступно прямое подключение к базе данных. Это тоже частенько доставляло проблем, поскольку почти все базы данных закрыты от удаленного подключения. Теперь же в терминале нам доступна база без проблем, а плюс есть дополнения для визуальной работы
    — при запуске на сервере vscode устанавливает там не только себя, но и набор дополнений какие нам нужны. К примеру если тут мы работаем с python и redis то просто подключившись через редактор к этому серверу у нас сразу будут настроены линтеры питона и прочее. Отключились и подключились к другому серверу, на котором работаем с php — у нас запустился анализ кода для php, генерация гетеров сеттеров, авто подключение классов и прочие прелести.
      Іван Клімчук
      02 ноября 2021, 17:34
      0
      Мне VSCode как-то не зашел в плане интерфейса, ну и там нет всего, что мне нужно, но если умеет так делать, то просто отлично.
        Александр Мельник
        02 ноября 2021, 17:40
        0
        Конечно, это дело привычки.
        Но vscode развивается так быстро, что я почти уверен — он умеет делать все что вам нужно, необходимо только это найти и настроить.
        Он, к примеру умеет не только подключиться к удаленному серверу, но даже «войти» внутрь запущенных там докер контейнеров. Или нативно работать с подсистемой WSL2 в винде, дебажить javascript, php, python, typescript, c++ и кучу другого. Точно так же имеет интерфейс для показа всех TODOшек как и phpStorm и так далее. И да, запускается за 1,5 секунды)
        И вот кстати не знаю, в phpStorm уже завезли синхронизацию настроек? Лично я очень доволен и пользуюсь такой фишкой в vscode. Все настройки редактора (от визуала, до тонких настроек, всех установленных дополнений) переносятся от программы к другой программе за 5 сек. Я часто переустанавливаю свою операционную систему, пробую разные варианты линукса и не страдаю. В любой операционке нужно 3 минуты чтобы установить редактор и еще 3 минуты, чтобы редактор подтянул мои настройки и применил. За 6 минут у меня снова мой настроенный редактор.
        Сергей Шлоков
        02 ноября 2021, 19:36
        +1
        Очень раздражало в phpstorm необходимость настраивать этот автоматический деплой, выкачивать файлы к себе локально.
        А мне наоборот по кайфу. Для своих проектов самое то. Это тебе и бекап, и возможность локальной разработки, и гит. Соглашусь, что для поддержки чужих проектов такое не очень удобно. Но в принципе можно выкачать не весь сайт, а только нужную часть.
        Мне VSCode тоже не зашел. Но это дело привычки. У него главная фишка — он бесплатный. Я только за наличие таких инструментов. Заодно и JetBrain в узде держит, чтобы аппетиты не росли.

        П.С. Я в своё время метался между SublimeText и PhpStorm. Что-то там нравилось, что-то там. В итоге всё-таки выбрал последний.
          Александр Мельник
          02 ноября 2021, 19:49
          +1
          А мне наоборот по кайфу.
          зависит наверное от специфики работ.
          У меня своеобразная работа. У нас фирма, которая разрабатывает 20 процентов, а 80 процентов это взятые по всему интернету сайты, которым обещали СЕО продвижение.
          Текучка проектов жуткая.
          В 8-30 тебе говорят, что взят новый проект на вордпрессе
          В 9-45 сео специалситы запустили свою жуткую программу по анализу и выкатили 450 (я не шучу) страниц в pdf с ошибками по этому сайту.
          В 10-30 начальник спрашивает почему ошибки еще не исправлены.
          Нет времени «изучить» этот проект. Понять где у него код, а где логи и кеш. Или же например читая отчет по СЕО ты видишь что они рекомендуют все изображения перевести в webp, а значит и картинки нужно выкачивать.
          Ты должен настроить загрузку по FTP c этого сервера, выкачать себе файлы, решать 450 страниц задач от СЕО, а вечером руководство говорит, что заказчик ушел — не договорились о ценах.
          В этой цепочки нет времени на изучение проекта, граммотное понимание что нужно выкачать себе (иногда директория называется src а в ней прошлый программист сохранил 22 архива сайта общим весом в 40 гигов).
          Поэтому для меня в этом плане VSCode — просто палочка выручалочка. Я подключился по ssh, поработал с файлами напрямую на сервере и все ок. Проект ушел я просто настройки сервера удалил и все.
      Александр Мельник
      02 ноября 2021, 18:15
      0
      У меня вопрос про бонусный параграф, использование composer.
      А зачем composer у что-либо знать о пакете minishop? Что дает указание блока repositories в composer.json?
      Мы выполним composer install и установится minishop? Так вроде бы нет.
      Почему composer.json в папке scripts?
      Я опишу то как я бы использовал composer, а вы если есть желание, скажите в чем ошибки.
      Я бы создал в корне composer.json, заполнил его require, выполнил install
      У нас была бы папка vendor. В корневом index.php выполнил бы подключение autoload.php
      После этого во всех сниппетах должны быть доступны подключенные библиотеки. Или я не прав?
        Іван Клімчук
        02 ноября 2021, 19:44
        0
        Можно и в корне создавать, а можно и в папке. Мне эти библиотеки ни к чему в коде самого MODX, поэтому я добавляю его только в папке со скриптами, где уже и работаю с кодом. Ваш вариант тоже ок. А в MODX 3 так и вовсе composer.json уже есть, нужно только сделать require и код будет доступен везде без лишних манипуляций.

        Конкретно в случае с miniShop, так как я обычно почти весь код MODX и компонентов исключаю из синхронизации, чтобы случайно не менять в процессе разработки, следовательно этого кода локально у меня нет, поэтому я подключаю этот код в dev-секции исключительно для возможности навигации в код, если нужно что-то проверить. Ну и просто чтобы PHPStorm видел классы и не ругался, что класс не найден.
          Сергей Шлоков
          02 ноября 2021, 20:28
          +2
          Ну и просто чтобы PHPStorm видел классы и не ругался, что класс не найден.
          Я для этого добавляю ссылки в «Include Path». Т.е. при разработке компонента, чтобы PhpStorm видел ядро MODX, указываю папку, где находится MODX. У меня для этого отдельное место, где лежат чистые библиотеки.
        Александр Мельник
        02 ноября 2021, 19:01
        0
        Иван, не могли бы вы на своем сайте сделать возможность авторизации не только через github?
        На сайте много полезной информации и я думаю и вам было бы лучше, если комментарии писались там, но вынужден признаться, в 2021 году я все еще не вижу необходимости для «одинокого разработчика» в использовании git как контроля версий и github как хранилища. Но я бы с удовольствием что то коментил, используя гугл аккаунт, или просто логин пароль.
          Николай Савин
          02 ноября 2021, 19:11
          +1
          Github необязательно использовать для хранения кода или командной работы. Вы, например, можете описывать найденные баги и пожелания по поводу новых возможностей в open source проектах — таких, как miniShop2
            Іван Клімчук
            02 ноября 2021, 19:49
            0
            У меня мой сайт, например, работает полностью на GitHub. Содержимое, код оформления и готовый сайт в разных репозиториях, все автоматизировано с помощью GitHub Actions.
            Іван Клімчук
            02 ноября 2021, 19:48
            +1
            Я бы сделал нормальные комментарии, но даже те, что сейчас, не совсем законны, пока я нахожусь в юрисдикции Республики Беларусь. А ситуация здесь… Ну вы и сами всё знаете. Не до законов, но это работает только для избранной касты. Вот здесь в заметке "Комментариев на сайте не будет" я описывал нюансы, читать примерно с 4 абзаца.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            16