Ошибка восстановления — пропуск раздела "after_assets_precompile" файла app.yml

Я только что выполнил ./launcher rebuild app — изменений в системных файлах не было. Теперь я застрял на мигающих точках Discourse.

Я проверил следующее:

  • docker ps показывает образ приложения Discourse (выглядит нормально).
  • Команда top показывает активность (выглядит нормально).
  • Я могу просмотреть статус Sidekiq (выглядит нормально).

Поэтому я снова пересобрал приложение.

Результат тот же.

Я попробовал режим безопасной загрузки (Safe-mode). Всё отключено. Изменений нет. Экран с мигающими точками всё ещё отображается.

Я просмотрел каждую строку исходного кода. Я вижу, что у меня четыре JS-файла недоступны. Это:

Недоступно множество файлов JavaScript. Это были первые найденные.

Первичный анализ:

  • Файлы недоступны через мою CDN.
  • CDN подтягивает данные из моего S3-бакета.
  • Файлов нет в моём S3-бакете, где хранятся все остальные активы.

Просматривая результаты пересборки, я вижу следующее:

  1. Четыре файла были созданы и записаны в public/assets/ с расширением .js.
  2. Четыре файла были сжаты и сохранены с расширением .br.js.

Проверка сервера:

  1. Все 4 файла .js доступны на моём сервере.
  2. Файлы .br.js недоступны на моём сервере.
  3. Файлы .br.js отсутствуют в моём S3-бакете.

Анализируя результаты пересборки, похоже, что активность after_assets_precompile не выполняется при моих пересборках. Я могу вручную выполнить rake s3:upload_assets, и активы будут перенесены в S3, после чего всё работает корректно.

Я проверил следующее:

  1. Мой файл .yml проходит проверку на правильное форматирование.

Что можно проверить, чтобы определить, почему after_assets_precompile не обрабатывается в рамках пересборки?

Примечание: Я использую версию: 3.4.0.beta4-dev - 6a50b3d4b4

Вы добавили стэнсу для загрузки ресурсов?

Настройка совместимого с S3 провайдера объектного хранилища для загрузки

Вы можете найти эту rake-задачу там и затем запустить её внутри контейнера (чтобы сэкономить время на пересборку). После этого выполните пересборку, как только отредактируете ваш файл yml.

S3 работает на сайте уже 43 дня. Команды rake были добавлены туда в рамках установки S3.

Сайт пересобирался как минимум 30 раз. По ходу работы я добавлял дополнительные плагины и компоненты. Это говорит о том, что файлы .js добавлялись и размещались в бакете S3.

Компонент S3 работал отлично. Это первый раз, когда у меня возникли проблемы с миграцией файлов в S3.

Что можно проверить, чтобы понять, почему файлы не были перемещены?

Кто-нибудь знает, что могло помешать выполнению after_assets_precompile?

Помогите!

При пересборке процесс пропускает следующий раздел в файле app.yml:

after_assets_precompile:
  - exec:
      cd: $home
      cmd:
        - sudo -E -u discourse bundle exec rake s3:upload_assets
        - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Сразу после пересборки я могу вручную выполнить эти команды:

./launcher enter app
rake s3:upload_assets
rake s3:expire_missing_assets

Команды выполняются и загружают необходимые файлы в S3.

Я добавил команду echo в раздел after_assets_precompile:

      cmd:
        - echo "Начало выполнения команд препайла"
        - sudo -E -u discourse bundle exec rake s3:upload_

Однако сообщение echo никогда не появляется в выводе пересборки.

Шаг пересборки обрабатывает разделы до и после этого блока в файле app.yml. Обрабатываются все плагины и пользовательские команды.

Я предпринял следующие шаги для попытки решения проблемы:

  1. Удалил все плагины.
  2. Отключил все компоненты.
  3. Проверил все файлы логов Discourse. Ошибок не обнаружено.
  4. Проверил основные системные файлы логов. Ошибок не обнаружено.

У кого-нибудь есть идеи, почему процесс пересборки пропускает этот раздел?

В качестве теста я переместил команды after_assets_precompile в раздел пользовательских команд.

run:
  - exec: echo "Начало пользовательских команд"
  ## Если вы хотите установить адрес электронной почты 'From' для вашей первой регистрации, раскомментируйте и измените:
  ## После получения первого письма с регистрацией снова закомментируйте строку. Её нужно выполнить только один раз.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  ## Команда для защиты сайта паролем во время работы. Удалите для продакшена.
  - exec:
      cd: $home
      cmd:
        - echo "Начало команд precompile"
        - sudo -E -u discourse bundle exec rake s3:upload_assets
        - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
  - exec: echo "Конец пользовательских команд"

Команды выполнились без каких-либо проблем. Это исключает проблемы с доступом к окружению или вопросы безопасности.

Процесс launcher пропускает код after_assets_precompile во время пересборки.
У кого-нибудь есть идеи?

Не знаю, но я пересобирал около 4 часов назад без каких-либо проблем.

Возможно, в вашем YAML-файле есть ошибка в пробелах или отступах. Найдите валидатор и проверьте: [validate yaml]

Это не должно быть ключом верхнего уровня, оно должно находиться под hooks, например:

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Это было указано в первом сообщении. app.yml был проверен на правильность отступов.

@supermathie — вы просто чудесны, у вас невероятное зрение. Вы смогли заметить, что код не был отступлен на два пробела, и это было видно только по одному фрагменту, а не по всему обширному разделу. Спасибо.

Я добавил два пробела, и проблема была решена.

Ранее я проверял файл app.yml с помощью валидатора YAML. Инструмент тестирования сообщил, что файл структурно корректен, но не смог определить, что он функционально неверен.

Правильный фрагмент кода должен выглядеть так:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-adplugin
          - git clone https://github.com/discourse/discourse-affiliate
          - git clone https://github.com/discourse/discourse-subscriptions
          - git clone https://github.com/discourse/discourse-yearly-review
          - git clone https://github.com/discourse/discourse-whos-online
          - git clone https://github.com/discourse/discourse-data-explorer
  # set internal files for cdn
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - echo "Beginning of precompile commands"
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Чтобы документировать файл app.yml: единственные ключи верхнего уровня — это:

  • templates:
  • params:
  • env:
  • volumes:
  • hooks:
  • run:

Всё остальное должно быть отступлено.

Самые простые ошибки могут быть самыми разочаровывающими. Я потерял шесть часов своей жизни из-за двух пробелов.

Отдал бы всё за два пробела.

Со мной это случается постоянно.

Ещё мой любимый случай — редактирование не того файла или правильного файла на неправильном компьютере.