Как установить хост по умолчанию для помощников 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.конфиг?
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