From 2f95b0d67edc0cccdb07a4620c85aca3ebf6b8c6 Mon Sep 17 00:00:00 2001 From: rubic0n Date: Fri, 29 Jan 2021 23:08:33 -0600 Subject: [PATCH 1/7] Enable remaining settings - use_cookies_with_metadata Provided extra options for cookies. Existing cookies will work fine. https://github.com/rails/rails/issues/36546 - return_only_media_type_on_content_type Include the charset in the content type. Looking at the headers that are being returned, it already did this. - Use Zeitwerk as the autoloader https://github.com/fxn/zeitwerk --- config/initializers/new_framework_defaults_6_0.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/config/initializers/new_framework_defaults_6_0.rb b/config/initializers/new_framework_defaults_6_0.rb index d45195a0..70406f6c 100644 --- a/config/initializers/new_framework_defaults_6_0.rb +++ b/config/initializers/new_framework_defaults_6_0.rb @@ -14,10 +14,10 @@ Rails.application.config.action_view.default_enforce_utf8 = false # # This option is not backwards compatible with earlier Rails versions. # It's best enabled when your entire app is migrated and stable on 6.0. -# Rails.application.config.action_dispatch.use_cookies_with_metadata = true +Rails.application.config.action_dispatch.use_cookies_with_metadata = true # Change the return value of `ActionDispatch::Response#content_type` to Content-Type header without modification. -# Rails.application.config.action_dispatch.return_only_media_type_on_content_type = false +Rails.application.config.action_dispatch.return_only_media_type_on_content_type = false # Return false instead of self when enqueuing is aborted from a callback. Rails.application.config.active_job.return_false_on_aborted_enqueue = true @@ -49,5 +49,4 @@ Rails.application.config.active_record.collection_cache_versioning = true # classes should be defined. It also requires that constants are not autoloaded in initializers. # Enabling Zeitwerk would be good, but it'll take some work. Using the :classic autoloader gives # us the same autoloading that Rails 5.2 had. -# Rails.application.config.autoloader = :zeitwerk -Rails.application.config.autoloader = :classic +Rails.application.config.autoloader = :zeitwerk From f77fa3ca4acebcbfdfef5c4ba925b55dc7184c06 Mon Sep 17 00:00:00 2001 From: rubic0n Date: Fri, 29 Jan 2021 23:12:53 -0600 Subject: [PATCH 2/7] Fix autoloading in initialization DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper and ActionText::TagHelper. https://github.com/rails/rails/issues/36546 Rails has a Railtie that will take the config setting out of Rails config, and put it onto ActionController when ActionController is loaded. Calling ActionController in the initializer forces it to autoload right now. Referencing the setting through the config allows it to autoload in when it needs to. --- config/initializers/suppress_csrf_warnings.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/suppress_csrf_warnings.rb b/config/initializers/suppress_csrf_warnings.rb index 410ab585..41350c25 100644 --- a/config/initializers/suppress_csrf_warnings.rb +++ b/config/initializers/suppress_csrf_warnings.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -ActionController::Base.log_warning_on_csrf_failure = false +Rails.application.config.action_controller.log_warning_on_csrf_failure = false From 2b9144d50c5ec5fc65f99632b287245e45a03152 Mon Sep 17 00:00:00 2001 From: rubic0n Date: Sun, 31 Jan 2021 17:06:45 -0600 Subject: [PATCH 3/7] Fix "NameError: uninitialized constant Exceptions" Zeitwerk operates on files in the autoload paths. Since the entire "app" directory is autoloaded, all files inside need to play by Zeitwerk's rules. Zeitwerk expects that a file named "exceptions.rb" would define a constant named "Exceptions". The exceptions file doesn't follow Zeitwerk's conventions. The easiest way to solve this is to move the execptions out of app/lib and into lib, where `require_relative` doesn't have Zeitwerk taken into account. --- config/application.rb | 2 +- {app/lib => lib}/exceptions.rb | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename {app/lib => lib}/exceptions.rb (100%) diff --git a/config/application.rb b/config/application.rb index 906ce23c..d23db66a 100644 --- a/config/application.rb +++ b/config/application.rb @@ -6,7 +6,7 @@ require 'rails/all' # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups) -require_relative '../app/lib/exceptions' +require_relative '../lib/exceptions' require_relative '../lib/paperclip/lazy_thumbnail' require_relative '../lib/paperclip/gif_transcoder' require_relative '../lib/paperclip/video_transcoder' diff --git a/app/lib/exceptions.rb b/lib/exceptions.rb similarity index 100% rename from app/lib/exceptions.rb rename to lib/exceptions.rb From bee832d4ef22fb911407ec5d64a476a0c6c73df5 Mon Sep 17 00:00:00 2001 From: rubic0n Date: Sun, 31 Jan 2021 17:11:02 -0600 Subject: [PATCH 4/7] Fix Zeitwerk load error for SanitizeConfig "expected file app/lib/sanitize_config.rb to define constant SanitizeConfig" --- app/lib/formatter.rb | 4 ++-- app/lib/{sanitize_config.rb => sanitize/config.rb} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename app/lib/{sanitize_config.rb => sanitize/config.rb} (100%) diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index db5dc0ad..07c53bb9 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'singleton' -require_relative './sanitize_config' +require_relative './sanitize/config' class HTMLRenderer < Redcarpet::Render::HTML def block_code(code, language) @@ -485,4 +485,4 @@ class Formatter "@#{encode(account.acct)}" end -end \ No newline at end of file +end diff --git a/app/lib/sanitize_config.rb b/app/lib/sanitize/config.rb similarity index 100% rename from app/lib/sanitize_config.rb rename to app/lib/sanitize/config.rb From 497ec0c1db7920431522ec9304bb1d748de69220 Mon Sep 17 00:00:00 2001 From: rubic0n Date: Sun, 31 Jan 2021 17:20:02 -0600 Subject: [PATCH 5/7] Teach Zeitwerk that REST is the class name, not Rest Also add a comment about the inflector settings. NameError: uninitialized constant InitialStateSerializer::REST Did you mean? Rest /vagrant/app/serializers/initial_state_serializer.rb:7:in `' /vagrant/app/serializers/initial_state_serializer.rb:3:in `
' --- config/initializers/inflections.rb | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 6831bdb6..7b169a7e 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -10,7 +10,27 @@ # inflect.uncountable %w( fish sheep ) # end -# : TODO : WTF IS THIS? + + +# When converting a file path to a constant name and vice versa, Rails uses inflections to know +# what to do. It uses the `humanize` method to convert a path to a constant, and it uses +# `underscore` to convert a constant to a path. +# +# The inflections below are ones that do not follow the typical convention of underscore/humanize. +# Referring to it as an "acronym" is the easiest way to tell it, "this constant should just be +# downcased to become a path". +# +# BEFORE: +# 'StatsD'.underscore +# => "stats_d" +# 'statsd'.humanize +# => "Statsd" +# +# AFTER: (inflect.acronym 'StatsD') +# 'StatsD'.underscore +# => "statsd" +# 'statsd'.humanize +# => "StatsD" ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'StatsD' inflect.acronym 'OEmbed' @@ -19,4 +39,5 @@ ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'PubSubHubbub' inflect.acronym 'ActivityStreams' inflect.acronym 'JsonLd' + inflect.acronym 'REST' end From 8c018b808892704e98a73d8f13169c6234af143e Mon Sep 17 00:00:00 2001 From: rubic0n Date: Sun, 31 Jan 2021 17:24:37 -0600 Subject: [PATCH 6/7] Don't autoload in initializers: SidekiqErrorHandler DEPRECATION WARNING: Initialization autoloaded the constant SidekiqErrorHandler. --- config/initializers/sidekiq.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index 288453a0..1322c750 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require_relative '../../app/lib/sidekiq_error_handler' + namespace = ENV.fetch('REDIS_NAMESPACE') { nil } redis_params = { url: ENV['REDIS_URL'] } From 87c41ede7acc0db96232a59de64d7876f671e5bd Mon Sep 17 00:00:00 2001 From: rubic0n Date: Sun, 31 Jan 2021 17:29:46 -0600 Subject: [PATCH 7/7] Load Rails 6.0 defaults and remove 6.0 migration initializer --- config/application.rb | 2 +- .../new_framework_defaults_6_0.rb | 52 ------------------- 2 files changed, 1 insertion(+), 53 deletions(-) delete mode 100644 config/initializers/new_framework_defaults_6_0.rb diff --git a/config/application.rb b/config/application.rb index d23db66a..1758473b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -23,7 +23,7 @@ require_relative '../lib/gabsocial/redis_config' module GabSocial class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 5.2 + config.load_defaults 6.0 # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers diff --git a/config/initializers/new_framework_defaults_6_0.rb b/config/initializers/new_framework_defaults_6_0.rb deleted file mode 100644 index 70406f6c..00000000 --- a/config/initializers/new_framework_defaults_6_0.rb +++ /dev/null @@ -1,52 +0,0 @@ -# Be sure to restart your server when you modify this file. -# -# This file contains migration options to ease your Rails 6.0 upgrade. -# -# Once upgraded flip defaults one by one to migrate to the new default. -# -# Read the Guide for Upgrading Ruby on Rails for more info on each option. - -# Don't force requests from old versions of IE to be UTF-8 encoded. -Rails.application.config.action_view.default_enforce_utf8 = false - -# Embed purpose and expiry metadata inside signed and encrypted -# cookies for increased security. -# -# This option is not backwards compatible with earlier Rails versions. -# It's best enabled when your entire app is migrated and stable on 6.0. -Rails.application.config.action_dispatch.use_cookies_with_metadata = true - -# Change the return value of `ActionDispatch::Response#content_type` to Content-Type header without modification. -Rails.application.config.action_dispatch.return_only_media_type_on_content_type = false - -# Return false instead of self when enqueuing is aborted from a callback. -Rails.application.config.active_job.return_false_on_aborted_enqueue = true - -# Send Active Storage analysis and purge jobs to dedicated queues. -Rails.application.config.active_storage.queues.analysis = :active_storage_analysis -Rails.application.config.active_storage.queues.purge = :active_storage_purge - -# When assigning to a collection of attachments declared via `has_many_attached`, replace existing -# attachments instead of appending. Use #attach to add new attachments without replacing existing ones. -Rails.application.config.active_storage.replace_on_assign_to_many = true - -# Use ActionMailer::MailDeliveryJob for sending parameterized and normal mail. -# -# The default delivery jobs (ActionMailer::Parameterized::DeliveryJob, ActionMailer::DeliveryJob), -# will be removed in Rails 6.1. This setting is not backwards compatible with earlier Rails versions. -# If you send mail in the background, job workers need to have a copy of -# MailDeliveryJob to ensure all delivery jobs are processed properly. -# Make sure your entire app is migrated and stable on 6.0 before using this setting. -Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob" - -# Enable the same cache key to be reused when the object being cached of type -# `ActiveRecord::Relation` changes by moving the volatile information (max updated at and count) -# of the relation's cache key into the cache version to support recycling cache key. -Rails.application.config.active_record.collection_cache_versioning = true - - -# The Rails 6 default autoloader is Zeitwerk. Zeitwerk has specific expectations on where certain -# classes should be defined. It also requires that constants are not autoloaded in initializers. -# Enabling Zeitwerk would be good, but it'll take some work. Using the :classic autoloader gives -# us the same autoloading that Rails 5.2 had. -Rails.application.config.autoloader = :zeitwerk