Как установить хост по умолчанию для помощников url в rails?



Я хотел бы сделать что-то подобное



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


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



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

808   8  

8 ответов:

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

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

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

# 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'

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

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

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

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

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

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

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

end

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

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

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

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

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

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

Comments

    Ничего не найдено.