How do I set default host for url helpers in rails? How do I set default host for url helpers in rails? ruby-on-rails ruby-on-rails

How do I set default host for url helpers in rails?


asset_host doesn't work for urls

You need to override default_url_options in your ApplicationController (at least in Rails 3)

http://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options

class ApplicationController < ActionController::Base  def default_url_options    if Rails.env.production?      {:host => "myproduction.com"}    else        {}    end  endend


Define the default host in your environment config:

# config/environments/staging.rbMyApp::Application.configure do  # ...  Rails.application.routes.default_url_options[:host] = 'preview.mydomain.com'  # ...end

Then you can create a URL anywhere in your app:

Rails.application.routes.url_helpers.widgets_url()

Or include the URL helpers in your class:

class MyLib  include Rails.application.routes.url_helpers  def make_a_url    widgets_url  endend

If you don't define the default host, you will need to pass it as an option:

widgets_url host: (Rails.env.staging? ? 'preview.mydomain.com' : 'www.mydomain.com')

It's also useful to specify things like the protocol:

widgets_url protocol: 'https'


Another way is to set it like this

# config/production.rbconfig.action_controller.default_url_options = { host: 'myproduction.com' }