diff --git a/config/application.rb b/config/application.rb
index 1b1289699c32502bc318cdb91c6ad301ee5b1b1c..439ce4094143e8e69b521c7a084043f72b044275 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -21,6 +21,7 @@ module Gitlab
     require_dependency Rails.root.join('lib/gitlab/request_context')
     require_dependency Rails.root.join('lib/gitlab/current_settings')
     require_dependency Rails.root.join('lib/gitlab/middleware/read_only')
+    require_dependency Rails.root.join('lib/gitlab/middleware/basic_health_check')
 
     # This needs to be loaded before DB connection is made
     # to make sure that all connections have NO_ZERO_DATE
@@ -188,7 +189,7 @@ module Gitlab
 
     # This middleware needs to precede ActiveRecord::QueryCache and other middlewares that
     # connect to the database.
-    config.middleware.insert_after "Rails::Rack::Logger", "Gitlab::Middleware::BasicHealthCheck"
+    config.middleware.insert_after Rails::Rack::Logger, ::Gitlab::Middleware::BasicHealthCheck
 
     config.middleware.insert_after Warden::Manager, Rack::Attack
 
@@ -225,7 +226,7 @@ module Gitlab
 
     config.cache_store = :redis_store, caching_config_hash
 
-    config.active_record.raise_in_transactional_callbacks = true
+    config.active_record.raise_in_transactional_callbacks = true unless rails5?
 
     config.active_job.queue_adapter = :sidekiq
 
diff --git a/config/environments/test.rb b/config/environments/test.rb
index af1011a1ab1df424e917f11ba9ccd6ea76f4662b..072f93150a38aab6f3fb8ee467c692fdc72fafeb 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -21,12 +21,12 @@ Rails.application.configure do
 
   if Gitlab.rails5?
     config.public_file_server.enabled = true
+    config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
   else
     config.serve_static_files = true
+    config.static_cache_control = "public, max-age=3600"
   end
 
-  config.static_cache_control = "public, max-age=3600"
-
   # Show full error reports and disable caching
   config.consider_all_requests_local       = true
   config.action_controller.perform_caching = false
diff --git a/config/initializers/active_record_avoid_type_casting_in_uniqueness_validator.rb b/config/initializers/active_record_avoid_type_casting_in_uniqueness_validator.rb
index d9418caf68bdaa1fcce540ec4368a7441557f70a..ef4abb77bd70c4eb779b43673e553daa7bb59e3f 100644
--- a/config/initializers/active_record_avoid_type_casting_in_uniqueness_validator.rb
+++ b/config/initializers/active_record_avoid_type_casting_in_uniqueness_validator.rb
@@ -21,8 +21,6 @@
 # This bug was fixed in Rails 5.1 by https://github.com/rails/rails/pull/24745/commits/aa062318c451512035c10898a1af95943b1a3803
 
 if Gitlab.rails5?
-  ActiveSupport::Deprecation.warn("#{__FILE__} is a monkey patch which must be removed when upgrading to Rails 5.1")
-
   if Rails.version.start_with?("5.1")
     raise "Remove this monkey patch: #{__FILE__}"
   end
diff --git a/config/initializers/static_files.rb b/config/initializers/static_files.rb
index 6c28686e69a899894e6f5d596c72cf59adc23902..a0b8b68f3ef6e54b3bb7ca6a675b06a8e60b5edd 100644
--- a/config/initializers/static_files.rb
+++ b/config/initializers/static_files.rb
@@ -1,17 +1,26 @@
 app = Rails.application
 
-if app.config.serve_static_files
+if (Gitlab.rails5? && app.config.public_file_server.enabled) || app.config.serve_static_files
   # The `ActionDispatch::Static` middleware intercepts requests for static files
   # by checking if they exist in the `/public` directory.
   # We're replacing it with our `Gitlab::Middleware::Static` that does the same,
   # except ignoring `/uploads`, letting those go through to the GitLab Rails app.
 
-  app.config.middleware.swap(
-    ActionDispatch::Static,
-    Gitlab::Middleware::Static,
-    app.paths["public"].first,
-    app.config.static_cache_control
-  )
+  if Gitlab.rails5?
+    app.config.middleware.swap(
+      ActionDispatch::Static,
+      Gitlab::Middleware::Static,
+      app.paths["public"].first,
+      headers: app.config.public_file_server.headers
+    )
+  else
+    app.config.middleware.swap(
+      ActionDispatch::Static,
+      Gitlab::Middleware::Static,
+      app.paths["public"].first,
+      app.config.static_cache_control
+    )
+  end
 
   # If webpack-dev-server is configured, proxy webpack's public directory
   # instead of looking for static assets