Как можно перекомпилировать плагин, не перекомпилируя Discourse (не обновляя его до последней версии)? У меня возникла проблема: обновления Discourse происходят очень часто. Очень часто после обновлений плагины перестают работать. Я хотел бы перекомпилировать плагин без обновления Discourse. Возможно ли это?
Уважаемый @Ed_Bobkov,
Вы можете реализовать «суть» того, что вы хотите, «неофициальным способом», собрав Discourse с помощью (1) собственного базового образа Docker для Discourse и (2) форка исходного кода Discourse на GitHub, если вы считаете, что это абсолютно необходимо, запустив форк исходного кода Discourse.
Таким образом, в этом случае вам потребуется:
- Отредактировать Dockerfile и добавить ссылку на ваш форк репозитория исходного кода Discourse.
- Отредактировать скрипт запуска и добавить альтернативный базовый образ Docker.
Обратите внимание на эту строку в Dockerfile для Discourse:
git clone https://github.com/discourse/discourse.git &&\
и на эту строку в скрипте запуска:
image="discourse/base:2.0.20200512-1735"
Если вы запускаете частный реестр Docker, вы можете отправить базовый образ Discourse (на ваш выбор) в свой частный реестр, и тогда, например:
image="localhost:5000/base:2.0.20200512-1735"
Аналогично, если вы создали форк Discourse, вы можете использовать этот форк в файле Dockerfile (см. выше), например:
git clone https://github.com/your_git_account/discourse.git &&\
Это поможет вам управлять как базовым образом Docker, так и кодом сборки.
Конечно, это не рекомендуется, так как вы не будете получать все исправления ошибок, обновления безопасности (и новые функции) от Discourse; этот метод не поддерживается и не рекомендуется.
Надеемся, это поможет, @Ed_Bobkov.
Примечание: При использовании этого метода вы всё равно пересобираете Discourse, но при этом контролируете (1) версию базового образа Docker и (2) код репозитория Discourse на GitHub; при этом вы «находитесь наедине с собой», поскольку этот метод не поддерживается и не рекомендуется (насколько мне известно).
См. также:
Спасибо за очень подробный ответ! Это не простой выход. Странно, что нет команды для повторной компиляции без проверки обновления Discourse.
Привет, @Ed_Bobkov
Да, вполне может существовать какой-то «другой способ», о котором я не знаю
В этом вопросе я полагаюсь на мнение других.
Я работал над этим несколько дней назад, и это было «лучшее, что я смог придумать» после множества попыток и ошибок.
Если есть более простой способ, я с радостью хотел бы об этом узнать; однако это имеет смысл, если вы часто работаете с Docker.
Прежде всего, образ должен быть собран. Discourse начинается с базового образа и модифицирует его. Когда вы добавляете новые плагины в продакшн-окружении (Docker), обычно требуется пересобрать контейнер. Именно поэтому я ответил так, как ответил выше.
Здесь много людей, которые разбираются в системном администрировании Discourse лучше меня, поэтому, возможно, кто-то другой предложит более подходящее решение в духе того, что вы ищете.
Удачи!
Если ваша цель — просто обновить плагин, не обновляя версию Discourse, то просто используйте консоль обновления Docker Manager, доступную из онлайн-панели управления, и нажмите соответствующую кнопку обновления для конкретного плагина, например:
https://your-site/admin/upgrade
Оговорка №1: Я считаю, что это будет работать только с общедоступными ресурсами, например, с плагинами с открытым исходным кодом. Для частных ресурсов, доступ к которым осуществляется с помощью ключей развертывания, встроенных в скрипт сборки, возможно, потребуется пересобрать весь проект.
Оговорка №2: Многие обновления плагинов выпускаются для обеспечения совместимости с последней сборкой Discourse. В большинстве случаев имеет смысл обновить оба компонента до последней версии, поскольку некоторые обновления могут нарушить совместимость со старыми версиями Discourse, но это зависит от того, что именно вы делаете.
