From 7b91adb16f0f92e5c190a90a63ab356ff95fc710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 19 Jul 2022 22:13:08 +0200 Subject: [PATCH 1/3] Use the same config for staging and preproduction We were already doing so by duplicating the code; now we're doing it explicitly. This is going to help because we're going to do a few changes in the environment files, and this way we don't have to do everything twice. Note that, after we're finished with these changes, the staging and production environments will be mostly identical and we could simply require the production environment configuration in the `staging.rb` file. We aren't doing so because some Consul installations might have customized these files and it'd be hard for them to deal with all these changes at once. So, for now, they'll only have to deal with the possible differences between their staging and preproduction environments. Changes to the preproduction environment that won't be applied to the staging environment can be added like this: require Rails.root.join("config", "environments", "staging") Rails.application.configure do config.log_level = :warn end --- config/environments/preproduction.rb | 90 +--------------------------- 1 file changed, 1 insertion(+), 89 deletions(-) diff --git a/config/environments/preproduction.rb b/config/environments/preproduction.rb index d0b4404433e..dc25ea047c4 100644 --- a/config/environments/preproduction.rb +++ b/config/environments/preproduction.rb @@ -1,89 +1 @@ -Rails.application.configure do - # Settings specified here will take precedence over those in config/application.rb. - - # Code is not reloaded between requests. - config.cache_classes = true - - # Eager load code on boot. This eager loads most of Rails and - # your application in memory, allowing both threaded web servers - # and those relying on copy on write to perform better. - # Rake tasks automatically ignore this option for performance. - config.eager_load = true - - # Because autoloading is disabled in production environments with Rails 5, - # using autoload_paths will not load needed classes from specified paths. - # The solution to this, is to ask Rails to eager load classes. - config.eager_load_paths += ["#{config.root}/lib"] - - # Full error reports are disabled and caching is turned on. - config.consider_all_requests_local = false - config.action_controller.perform_caching = true - - # Enable Rack::Cache to put a simple HTTP cache in front of your application - # Add `rack-cache` to your Gemfile before enabling this. - # For large-scale production use, consider using a caching reverse proxy like - # NGINX, varnish or squid. - # config.action_dispatch.rack_cache = true - - # Disable serving static files from the `/public` folder by default since - # Apache or NGINX already handles this. - config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? - - # Compress JavaScripts and CSS. - config.assets.js_compressor = Uglifier.new(harmony: true) - # config.assets.css_compressor = :sass - - # Do not fallback to assets pipeline if a precompiled asset is missed. - config.assets.compile = false - - # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb - - # Specifies the header that your server uses for sending files. - # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache - # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX - - # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. - # Configure force_ssl in secrets.yml - config.force_ssl = Rails.application.secrets.force_ssl - - # Use the lowest log level to ensure availability of diagnostic information - # when problems arise. - config.log_level = :debug - - # Prepend all log lines with the following tags. - # config.log_tags = [ :subdomain, :uuid ] - - # Use a different logger for distributed setups. - # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) - - # Use a different cache store in production. - config.cache_store = :mem_cache_store - - # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = "http://assets.example.com" - - # Ignore bad email addresses and do not raise email delivery errors. - # Set this to true and configure the email server for immediate delivery to raise delivery errors. - config.action_mailer.raise_delivery_errors = true - config.action_mailer.default_url_options = { host: Rails.application.secrets.server_name } - config.action_mailer.asset_host = "https://#{Rails.application.secrets.server_name}" - - # Configure your SMTP service credentials in secrets.yml - if Rails.application.secrets.smtp_settings - config.action_mailer.delivery_method = Rails.application.secrets.mailer_delivery_method || :smtp - config.action_mailer.smtp_settings = Rails.application.secrets.smtp_settings - end - - # Disable locale fallbacks for I18n - # (prevents using fallback locales set in application.rb). - # config.i18n.fallbacks = false - - # Send deprecation notices to registered listeners. - config.active_support.deprecation = :notify - - # Use default logging formatter so that PID and timestamp are not suppressed. - config.log_formatter = ::Logger::Formatter.new - - # Do not dump schema after migrations. - config.active_record.dump_schema_after_migration = false -end +require Rails.root.join("config", "environments", "staging") From e7b271fb47fcbf8d7aba2e45ac3e694923f587d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 19 Jul 2022 22:51:35 +0200 Subject: [PATCH 2/3] Remove obsolete comment in environment files We removed the assets initializer in commit 91cd1ce1b. --- config/environments/production.rb | 2 -- config/environments/staging.rb | 2 -- 2 files changed, 4 deletions(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index 3eb80f2dce7..fee36a6d043 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -30,8 +30,6 @@ # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false - # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb - # Enable serving of images, stylesheets, and JavaScripts from an asset server. # config.action_controller.asset_host = 'http://assets.example.com' diff --git a/config/environments/staging.rb b/config/environments/staging.rb index d0b4404433e..4ade4ea8a7e 100644 --- a/config/environments/staging.rb +++ b/config/environments/staging.rb @@ -36,8 +36,6 @@ # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false - # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb - # Specifies the header that your server uses for sending files. # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX From dbc988f3e4117c758bdaf6cfabe1126ed6c2c117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 19 Jul 2022 23:13:42 +0200 Subject: [PATCH 3/3] Unify production and staging environment files We changed the structure of the production environment file in commit eb36b7e2e, but forgot to do so for staging and preproduction. We're also changing the comments in the production environment file so they use double quotes, like we do everywhere else. After these changes, the staging and production environments are mostly identical, and we could simply require the production environment configuration in the `staging.rb` file. We aren't doing so because we've just done changes affecting the preproduction environment and, since Consul installations might have customized these files, it might be hard for them to deal with all these changes at once. --- config/environments/production.rb | 10 ++++----- config/environments/staging.rb | 35 ++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index fee36a6d043..cb680f167c4 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -31,7 +31,7 @@ config.assets.compile = false # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = 'http://assets.example.com' + # config.action_controller.asset_host = "http://assets.example.com" # Specifies the header that your server uses for sending files. # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache @@ -39,8 +39,8 @@ # Mount Action Cable outside main process or domain # config.action_cable.mount_path = nil - # config.action_cable.url = 'wss://example.com/cable' - # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + # config.action_cable.url = "wss://example.com/cable" + # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # Configure force_ssl in secrets.yml @@ -84,8 +84,8 @@ config.log_formatter = ::Logger::Formatter.new # Use a different logger for distributed setups. - # require 'syslog/logger' - # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + # require "syslog/logger" + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name") if ENV["RAILS_LOG_TO_STDOUT"].present? logger = ActiveSupport::Logger.new(STDOUT) diff --git a/config/environments/staging.rb b/config/environments/staging.rb index 4ade4ea8a7e..d84df43000e 100644 --- a/config/environments/staging.rb +++ b/config/environments/staging.rb @@ -19,12 +19,6 @@ config.consider_all_requests_local = false config.action_controller.perform_caching = true - # Enable Rack::Cache to put a simple HTTP cache in front of your application - # Add `rack-cache` to your Gemfile before enabling this. - # For large-scale production use, consider using a caching reverse proxy like - # NGINX, varnish or squid. - # config.action_dispatch.rack_cache = true - # Disable serving static files from the `/public` folder by default since # Apache or NGINX already handles this. config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? @@ -36,10 +30,18 @@ # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = "http://assets.example.com" + # Specifies the header that your server uses for sending files. # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = "wss://example.com/cable" + # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # Configure force_ssl in secrets.yml config.force_ssl = Rails.application.secrets.force_ssl @@ -49,16 +51,15 @@ config.log_level = :debug # Prepend all log lines with the following tags. - # config.log_tags = [ :subdomain, :uuid ] - - # Use a different logger for distributed setups. - # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + config.log_tags = [:request_id] # Use a different cache store in production. config.cache_store = :mem_cache_store - # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = "http://assets.example.com" + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "consul_#{Rails.env}" + config.action_mailer.perform_caching = false # Ignore bad email addresses and do not raise email delivery errors. # Set this to true and configure the email server for immediate delivery to raise delivery errors. @@ -82,6 +83,16 @@ # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new + # Use a different logger for distributed setups. + # require "syslog/logger" + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name") + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false end