Большинство плагинов содержат весь необходимый код и имеют простую установку. Два плагина, которые вы пытались использовать, требуют загрузки библиотек (gems) из интернета для работы.
Вы знаете, где в коде происходит загрузка Ruby-гемов для плагинов? Я пытался найти это, но пока не нашёл нужное место.
Мне кажется, что вместо использования закэшированных гемов было бы более изящно запустить зеркало RubyGems на изолированном хосте. Я нашёл здесь руководство, и, судя по всему, там можно настроить дополнительные системные источники гемов:
Наш внутренний Discourse счастливо работает на одной и той же старой версии уже довольно давно, но мы наконец отказываемся от IE9, поэтому обновление давно overdue.
Могу сообщить, что это руководство по-прежнему актуально для последних версий Discourse. Даже с RHEL8 вместо 7 ![]()
В ходе экспериментов я нашёл способ заставить плагины discourse-prometheus и discourse-calendar работать в офлайн-режиме, несмотря на дополнительные зависимости. Секрет заключается в том, чтобы извлечь ruby-гемы из директории плагинов на сервере сборки, а также гемы из /var/www/discourse/vendor/bundle/ruby.
docker run -it -v ~/local/rubygems.org:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/vendor/bundle/ruby /local-rubygems"
docker run -it -v ~/local/rubygems.org/plugin-gems/discourse-calendar:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/plugins/discourse-calendar/gems /local-rubygems"
docker run -it -v ~/local/rubygems.org/plugin-gems/discourse-prometheus:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/plugins/discourse-prometheus/gems /local-rubygems"
Затем в файле /templates/web.template.yml:
- exec:
cd: $home
hook: bundle_exec
cmd:
# копируем локальный кэш ruby
- cp -rv /local-rubygems.org/ruby/* $home/vendor/bundle/ruby/
- cp -rv /local-rubygems.org/plugin-gems/* $home/plugins/
- su discourse -c 'bundle install --local --deployment --retry 3 --jobs 4 --verbose --without test development'
Кстати, похоже, что тема про Active Directory IIS SSO где-то потерялась, но код всё ещё доступен по адресу GitHub - laktak/discourse-sso: Single Sign On for Discourse with Active Directory · GitHub и продолжает работать с теперь переименованным DiscourseConnect SSO.
Я попробовал ещё одно обновление, и, похоже, на каком-то этапе в файл web.template.yml был добавлен новый раздел “yarn install”, который вызывает сбои в изолированной среде.
- exec:
cd: $home
cmd:
- "[ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache list'"
При сравнении содержимого старого и нового контейнеров видно, что в новом есть множество закэшированных пакетов yarn в директории /usr/local/share/.cache/yarn/v6, тогда как в старом их нет. Похоже, все необходимые пакеты node.js раньше включались в базовый образ, а теперь они обновляются во время пересборки?
Я поэкспериментирую с копированием кэша yarn так же, как это делается для кэша ruby, и посмотрю, получится ли заставить yarn использовать закэшированные пакеты из сборочного контейнера.