Подтвердить что ты не робот

Как установить сервер по умолчанию для помощников URL-адресов в рельсах?

Я хотел бы сделать что-то вроде этого

config.default_host = 'www.subdomain.example.com'

в некоторых моих конфигурационных файлах, так что object_url helpers (ActionView::Helpers::UrlHelper) создают ссылки, начинающиеся с http://www.subdomain.example.com

Я попытался выполнить поиск документов, но я ничего не нашел, кроме ActionMailer docs и http://api.rubyonrails.org/classes/Rails/Configuration.html, что для меня не полезно, потому что я не знаю, в какой похлопывании посмотреть. Есть ли место, которое описывает всю структуру Rails:: Initializer.config?

4b9b3361

Ответ 1

asset_host не работает для URL-адресов

Вам нужно переопределить default_url_options в ApplicationController (по крайней мере, в 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
  end
end

Ответ 2

Определите хост по умолчанию в конфигурации вашей среды:

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

Затем вы можете создать URL-адрес в любом месте приложения:

Rails.application.routes.url_helpers.widgets_url()

Или включите URL-адреса в свой класс:

class MyLib
  include Rails.application.routes.url_helpers

  def make_a_url
    widgets_url
  end
end

Если вы не определяете хост по умолчанию, вам необходимо передать его в качестве опции:

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

Также полезно указывать такие вещи, как протокол:

widgets_url protocol: 'https'

Ответ 3

Другой способ - установить его таким образом

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

Ответ 4

Вы можете легко установить параметр :host или/и :only_path для каждого url_helper.   yours_url(params, :host => "http://example.com", :only_path => Rails.env.test?) Таким образом, вы не устанавливаете глобальные параметры default_url_options в своих средах, если вы этого не хотите.

Ответ 5

Насколько я знаю, помощники *_url используют настроенное имя сервера. Например, если моя установка Apache принимает запросы для этого приложения Rails в http://www.myapp.com/, тогда Rails будет использовать этот адрес. Поэтому методы *_url в среде разработки указывают на http://localhost:3000 по умолчанию.

Хост-ресурс, предложенный в предыдущем ответе, будет влиять только на помощники image_tag, stylesheet_link_tag и javascript_link_tag.

Ответ 6

Самый простой способ получить динамический доменный URL с использованием глобальной переменной в рельсах.

class ApplicationController < ActionController::Base
  def base_url       
    $base_url = request.base_url
  end

end

После того, как вы просто вызвали этот метод в свой файл заголовка <% base_url %>, теперь вы можете получить доступ к своему URL-адресу домена в любом месте приложения.

Ответ 7

Решение NSD - это то, как я это делаю, но мне пришлось добавить блок, чтобы он работал с https:

config.action_controller.asset_host = Proc.new { |source, request|
  (request ? request.protocol : 'http://') +  "www.subdomain.example.com"
}