I gave up trying to add jQuery to Mastodon 4.0.2 via Webpacker How do I add jQuery to Mastodon 4.02 (using Rails 6 and Webpacker 4)?
So now I want to simply add a link to a jQuery CDN in the Mastodon header file application.html.haml
.
I add
= javascript_pack_tag "https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"
to application.html.haml
and then run
RAILS_ENV=production bundle exec rake tmp:cache:clear
RAILS_ENV=production bundle exec rails assets:generate_static_pages
RAILS_ENV=production bundle exec rails assets:precompile
and then exit from the root account and run
systemctl restart mastodon-*
but Mastodon crashes with the app's generic error screen.
Edit 2/1/23
Using
%script src: "https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"
also crashes Mastodon.
Questions:
• How can I simply add a lnk to the jQuery CDN in the header of Mastodon?
Edit 2/7/23 alex's solution to edit the content_security_policy.rb to use a CDN and avoid CSP issues works
Edit 2/6/23 alex points out that the CDN will be blocked due to CSP headers (you could add an exception in Nginx, but that's for another question); the best solution is to use alex's Sprockets answer below.
• Where are the error logs that would show me more info on the crash?
Edit 2/6/23 The most relevant logs are viewed by running
journalctl -f -u mastodon-web
which outputs:
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] ActionView::Template::Error (Inconsistent indentation: 1 tab used for indentation, but the rest of the document was indented using 2 spaces.)
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] 32: = javascript_pack_tag "locale_#{I18n.locale}", crossorigin: 'anonymous
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] 33: = javascript_include_tag "jquery"
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] 34: = csrf_meta_tags
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] 35: %meta{ name: 'style-nonce', content: request.content_security_policy_nonce }
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] 36:
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] 37: = stylesheet_link_tag '/inert.css', skip_pipeline: true, media: 'all', id: 'inert-style'
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] 38: = stylesheet_link_tag custom_css_path, skip_pipeline: true, host: root_url, media: 'all'
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06]
Feb 06 15:12:28 ExampleMastodon bundle[9057]: [44fb4365-61e3-4bbb-b495-704b84c0ba06] app/views/layouts/application.html.haml:35
which shows the cause of the crash: "Inconsistent indentation"
Arrgg...
Fixed that and it works.
This is application.html.haml
at Github: https://github.com/mastodon/mastodon/blob/a5a00d7f7adff5e0afbd23ac1e1b16120137509a/app/views/layouts/application.html.haml
!!! 5
%html{ lang: I18n.locale }
%head
%meta{ charset: 'utf-8' }/
%meta{ name: 'viewport', content: 'width=device-width, initial-scale=1' }/
- if cdn_host?
%link{ rel: 'dns-prefetch', href: cdn_host }/
%meta{ name: 'cdn-host', content: cdn_host }/
- if storage_host?
%link{ rel: 'dns-prefetch', href: storage_host }/
%link{ rel: 'icon', href: '/favicon.ico', type: 'image/x-icon' }/
- %w(16 32 48).each do |size|
%link{ rel: 'icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
- %w(57 60 72 76 114 120 144 152 167 180 1024).each do |size|
%link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/apple-touch-icon-#{size}x#{size}.png") }/
%link{ rel: 'mask-icon', href: asset_pack_path('media/images/logo-symbol-icon.svg'), color: '#6364FF' }/
%link{ rel: 'manifest', href: manifest_path(format: :json) }/
%meta{ name: 'theme-color', content: '#191b22' }/
%meta{ name: 'apple-mobile-web-app-capable', content: 'yes' }/
%title= content_for?(:page_title) ? safe_join([yield(:page_title).chomp.html_safe, title], ' - ') : title
= stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous'
= stylesheet_pack_tag current_theme, media: 'all', crossorigin: 'anonymous'
= javascript_pack_tag 'common', crossorigin: 'anonymous'
= javascript_pack_tag "locale_#{I18n.locale}", crossorigin: 'anonymous'
= csrf_meta_tags
%meta{ name: 'style-nonce', content: request.content_security_policy_nonce }
= stylesheet_link_tag '/inert.css', skip_pipeline: true, media: 'all', id: 'inert-style'
= stylesheet_link_tag custom_css_path, skip_pipeline: true, host: root_url, media: 'all'
= yield :header_tags
%body{ class: body_classes }
= content_for?(:content) ? yield(:content) : yield
.logo-resources{ 'tabindex' => '-1', 'inert' => true, 'aria-hidden' => true }
= render_symbol :icon
= render_symbol :wordmark