Set default_url_options For Entire Application

There are a number of ways to set default_url_options for the various modules that need them. While the development server can infer URL options for the most part, it needs them explicitly defined for ActionMailer. You may also see the ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true error when using a URL helper. That's because the routes config also needs to know.

Instead of cobbling together default settings in several different places as the issues arise, you can define them application-wide like so:

# config/environments/development.rb
Rails.application.default_url_options = { host: 'localhost', port: 3000 }

Rails.application.configure do
 # ...
end

Add the default_url_options to Rails.application just outside of the standard configure block in each of your environment config files. Now everything should know how to generate full URLs.

Note: I've tested this out in a Rails 6.1 application.

source

Last updated