Il task Rake "assets:precompile" fallisce a causa di un problema di compilazione JS

Sto cercando di fare un’installazione pulita per discourse e vedo il seguente errore durante l’esecuzione del task assets:precompile. Vedo il seguente errore di compilazione ma non sono sicuro di cosa si tratti.

rake aborted!
Barber::PrecompilerError: Pre compilation failed for: {{#if isActive}}
  {{!-- template-lint-disable no-invalid-interactive --}}
  <div {{on "keydown" (action "keydown")}} class="emoji-picker {{if @isActive "opened"}}">
    {{!-- template-lint-enable no-invalid-interactive --}}
    <div class="emoji-picker-category-buttons">
      {{#if recentEmojis.length}}
        <button type="button" data-section="recent" {{action "onCategorySelection" "recent"}} class="btn btn-default category-button emoji">
          {{replace-emoji ":star:"}}
        </button>
      {{/if}}

      {{emoji-group-buttons onCategorySelection=(action "onCategorySelection") tagName=""}}

      {{#each-in customEmojis as |group emojis|}}
        <button type="button" data-section={{concat "custom-" group}} {{action "onCategorySelection" (concat "custom-" group)}} class="btn btn-default category-button emoji">
          {{replace-emoji (concat ":" emojis.firstObject.code ":")}}
        </button>
      {{/each-in}}
    </div>

    <div class="emoji-picker-content">
      <div class="emoji-picker-search-container">
        {{input
          class="filter"
          name="filter"
          placeholder=(i18n "emoji_picker.filter_placeholder")
          autocomplete="discourse"
          autocorrect="off"
          autocapitalize="off"
          input=(action "onFilter")
        }}

        {{d-icon "search"}}
      </div>

      <div class="emoji-picker-emoji-area" role="button" {{on "click" this.onEmojiSelection}} {{on "mouseover" this.onEmojiHover}}>
        <div class="results"></div>

        {{#conditional-loading-spinner condition=isLoading}}
          <div class="emojis-container">
            {{#if recentEmojis.length}}
              <div class="section recent" data-section="recent">
                <div class="section-header">
                  <span class="title">{{i18n "emoji_picker.recent"}}</span>
                  {{d-button icon="trash-alt" action=(action "onClearRecents") class="trash-recent"}}
                </div>
                <div class="section-group">
                  {{#each recentEmojis as |emoji|}}
                    {{replace-emoji (concat ":" emoji ":") (hash lazy=true)}}
                  {{/each}}
                </div>
              </div>
            {{/if}}

            {{emoji-group-sections}}

            {{#each-in customEmojis as |group emojis|}}
              <div class="section" data-section="custom-{{group}}">
                <div class="section-header">
                  <span class="title">
                    {{i18n (concat "emoji_picker." group)}}
                  </span>
                </div>
                {{#if emojis.length}}
                  <div class="section-group">
                    {{#each emojis as |emoji|}}
                      <img title={{emoji.code}} width="20" height="20" loading="lazy" class="emoji" src={{emoji.src}}>
                    {{/each}}
                  </div>
                {{/if}}
              </div>
            {{/each-in}}
          </div>
        {{/conditional-loading-spinner}}
      </div>

      <div class="emoji-picker-footer">
        <div class="emoji-picker-emoji-info">
          {{#if hoveredEmoji}}
            {{replace-emoji (concat ":" hoveredEmoji ":")}}
          {{/if}}
        </div>

        <div class="emoji-picker-diversity-picker">
          {{#each diversityScales as |diversityScale index|}}
            {{d-button
              icon=diversityScale.icon
              class=(concat "diversity-scale " diversityScale.name)
              title=diversityScale.title
              action=(action "onDiversitySelection" index)
            }}
          {{/each}}
        </div>
      </div>
    </div>
  </div>

  {{#if site.mobileView}}
    <div role="button" class="emoji-picker-modal-overlay" {{on "click" this.onClose}}></div>
  {{/if}}
{{/if}}

. Compiler said: Error
~/Discourse/Discourse-2.8.x/AL2_x86_64/DEV.STD.PTHREAD/build/private/env/ruby2.7.x/ruby2.7.x/lib/ruby/gems/2.7.0/gems/barber-0.12.2/lib/barber/precompiler.rb:33:in `rescue in compile'
~/Discourse/Discourse-2.8.x/AL2_x86_64/DEV.STD.PTHREAD/build/private/env/ruby2.7.x/ruby2.7.x/lib/ruby/gems/2.7.0/gems/barber-0.12.2/lib/barber/precompiler.rb:30:in `compile'
~/Discourse/Discourse-2.8.x/AL2_x86_64/DEV.STD.PTHREAD/build/private/env/ruby2.7.x/ruby2.7.x/lib/ruby/gems/2.7.0/gems/barber-0.12.2/lib/barber/precompiler.rb:8:in `compile'
~/Discourse/Discourse-2.8.x/AL2_x86_64/DEV.STD.PTHREAD/build/private/env/ruby2.7.x/ruby2.7.x/lib/ruby/gems/2.7.0/gems/ember-handlebars-template-0.8.0/lib/ember/handlebars/template.rb:166:in `block in precompile_ember_handlebars'
~/Discourse/Discourse-2.8.x/AL2_x86_64/DEV.STD.PTHREAD/build/private/env/ruby2.7.x/ruby2.7.x/lib/ruby/gems/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cache.rb:85:in `fetch'
~/Discourse/Discourse-2.8.x/AL2_x86_64/DEV.STD.PTHREAD/build/private/env/ruby2.7.x/ruby2.7.x/lib/ruby/gems/2.7.0/gems/ember-handlebars-template-0.8.0/lib/ember/handlebars/template.rb:165:in `precompile_ember_handlebars'
~/Discourse/Discourse-2.8.x/AL2_x86_64/DEV.STD.PTHREAD/build/rails-root/lib/freedom_patches/raw_handlebars.rb:99:in `call'

Questo non sembra un’installazione standard?

2 Mi Piace

sì, sto provando a fare un’installazione personalizzata su una macchina Amazon Linux

Sebbene Discourse sia un software gratuito e open source, qui su Meta limitiamo il nostro supporto gratuito alle installazioni che seguono la guida di installazione standard. Poiché esistono infinite combinazioni di modi per eseguire il software, ciò ci consente di fornire una base facile da usare e sempre aggiornata per tutti gli utenti.

Se stai cercando di personalizzare Discourse, utilizzando plugin o temi, puoi cambiare tutto pur continuando a eseguire un’installazione supportata.

2 Mi Piace

E se invece apporti modifiche creando un fork, ti pentirai amaramente di averlo fatto.

Sono riuscito a individuare la causa principale del problema, quindi essenzialmente durante l’esecuzione del task rake assets-precompile, sta cercando di caricare tutti i file js utilizzando i template hbs in emoji-picker.hbs. Il template ha certe variabili che richiedono che i dati vengano forniti dal chiamante ed è qui che il parsing fallisce. Altri file hbs che non hanno riferimenti a ‘@’ vengono compilati con successo.

Hai qualche idea o documentazione su come questi template hbs vengono utilizzati in Discourse?

Potresti iniziare con Guida per principianti alla creazione di plugin Discourse Parte 1: Creazione di un plugin di base.