Как внести изменения в app/views/layouts/?

Вопрос простой и быстрый:

Конечно, я что-то упустил!

Мы внесли несколько правок в контейнер приложения в одном из файлов в директории /var/www/discourse/app/views/layouts.

Затем мы подумали (как дилетанты), что можем просто пересобрать контейнер с помощью команды /var/discourse/launcher rebuild app (но это не так!), но каждый раз при этом наши правки перезаписываются.

Мы не хотим форкать Discourse, но хотели бы пересобирать приложение с помощью launcher, не теряя при этом наши локальные правки.

Может кто-нибудь подсказать, как это сделать?

Спасибо!

Похоже, мы выяснили, почему при попытке восстановить приложение наши файлы перезаписывались во время процесса пересборки:

Причина в том, что утилита launcher загружает базовый образ Discourse, в котором уже есть директория .git, а файл конфигурации git по умолчанию указывает на основной репозиторий Discourse, что приводит к перезаписи наших изменений:

launcher

pull_image() {
  # Добавить одну повторную попытку для обхода ошибок TLS в Docker Hub
  $docker_path pull $image || $docker_path pull $image
}

Ранее мы ошибочно полагали, что launcher собирает образ (как мы могли это упустить?!), но теперь очевидно, что он загружает базовый образ из Docker Hub.

Придётся начинать всё сначала!

Есть ли флаг, который можно установить, чтобы launcher не загружал базовый образ, а собирал его самостоятельно?

Привет, @DBHacker

Похоже, вам стоит сделать следующее:

  1. внести изменения в базовый контейнер (как вы и упоминали);
  2. пометить и сохранить этот образ;
  3. загрузить этот образ в свой собственный репозиторий образов Docker;
  4. отредактировать файл launcher, чтобы он выполнял docker pull для изменённого базового образа из вашего репозитория.

Надеюсь, это хоть немного поможет?

В любом случае, это не поддерживается на платформе Meta (по крайней мере, насколько я знаю), так что вам придётся разбираться самостоятельно.

Удачного хакинга! :slight_smile:

Примечание: я это не пробовал… но похоже, вы отлично проводите время! :slight_smile:

Вам необходимо внести эти изменения в плагин или компонент темы.

Привет, @pfaffman

Полностью согласен с вами: плагины и компоненты тем — это правильный путь! Этот метод полностью поддерживается и позволяет оставаться в синхронизации с командой разработки Meta.

Также полезно проявлять любознательность, исследовать возможности и глубже понимать Discourse. После прочтения этой темы, опубликованной вчера, я создал локальный реестр Docker, пометил базовый образ Discourse локально, загрузил этот образ в свой новый реестр Docker (localhost), а затем пересобрал приложение Discourse, загрузив базовый образ из реестра.

Это увлекательно, на мой взгляд, экспериментировать и узнавать больше о Discourse, и я многому научился в ходе этого исследования/эксперимента от системного администратора. Конечно, так не следует запускать производственное приложение, но я многому научился, пройдя шаги по загрузке базового образа Discourse из локального реестра вместо удаленного, и это оказалось удивительно просто. Поэтому я оформил этот эксперимент и делюсь им с другими любопытными системными администраторами:

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

Оставайтесь любознательными

Есть очень простой способ реализовать это, не беспокоясь об изображениях или создании плагина. Если вы просто изменяете существующие плоские файлы, вы можете модифицировать их через app.yml.

Найдите hooks и pups. Несколько других руководств уже используют этот подход.

Спасибо, @neounix!

Мне тоже нравится учиться и пробовать новое.

Когда-нибудь, когда у меня появится время, я постараюсь узнать больше о Docker и локальных реестрах.

А пока я сосредоточусь на разработке плагинов, так как они поддерживаются Discourse и соответствуют модели разработки Discourse.

Как вы и сказали, изучение этих вещей — это весело, но также важно оставаться в рамках основного потока!

:slight_smile:

Согласен.

Даже после экспериментов с локальным Docker-реестром и локальным базовым образом Discourse я не смог получить стабильных результатов (не уверен, почему, возможно, я упускаю какую-то ключевую деталь в конфигурации).

С другой стороны, я узнал больше о локальных Docker-реестрах и о том, как их создавать и управлять ими.

Просто побочный эксперимент с Docker… точно многому научился!

Да, похоже, что единственный жизнеспособный вариант — это плагин.

Спасибо всем за ответы и помощь.

Какие изменения в файлах вы вносите?