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

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

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

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

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

Ответы [ 8 ]

52 голосов
/ 14 марта 2011

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
47 голосов
/ 12 января 2014

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

# 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'
28 голосов
/ 03 февраля 2015

Другой способ установить это так:

# config/production.rb
config.action_controller.default_url_options = { host: 'myproduction.com' }
3 голосов
/ 28 апреля 2017

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

0 голосов
/ 15 февраля 2016

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

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

end

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

0 голосов
/ 19 апреля 2010

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

config.action_controller.asset_host = Proc.new { |source, request|
  (request ? request.protocol : 'http://') +  "www.subdomain.example.com"
}
0 голосов
/ 18 апреля 2010

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

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

0 голосов
/ 18 апреля 2010

Это так, но я не совсем уверен, что это те помощники, о которых вы говорите:

ActionController::Base.asset_host = "assets.example.com"

http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...