ruby-on-rails - para - host windows 7
¿Cómo configuro el host predeterminado para los ayudantes de url en los rieles? (8)
Me gustaría hacer algo como esto
config.default_host = ''www.subdomain.example.com''
en algunos de mis archivos de configuración, para que object_url
helpers ( ActionView::Helpers::UrlHelper
) produzca enlaces que comiencen por http://www.subdomain.example.com
Intenté buscar en los documentos, pero no encontré nada, excepto los documentos de ActionMailer
y http://api.rubyonrails.org/classes/Rails/Configuration.html que no es útil para mí, porque no sé en qué momento Mira. ¿Hay algún lugar que describa la estructura completa de Rails :: Initializer.config?
Defina el host predeterminado en la configuración de su entorno:
# config/environments/staging.rb
MyApp::Application.configure do
# ...
Rails.application.routes.default_url_options[:host] = ''preview.mydomain.com''
# ...
end
Luego puedes crear una URL en cualquier lugar de tu aplicación:
Rails.application.routes.url_helpers.widgets_url()
O incluye los ayudantes de URL en tu clase:
class MyLib
include Rails.application.routes.url_helpers
def make_a_url
widgets_url
end
end
Si no define el host predeterminado, deberá pasarlo como una opción:
widgets_url host: (Rails.env.staging? ? ''preview.mydomain.com'' : ''www.mydomain.com'')
También es útil especificar cosas como el protocolo:
widgets_url protocol: ''https''
Hasta donde yo sé, los ayudantes de *_url
usan el nombre de host configurado del servidor. Entonces, por ejemplo, si mi instalación de Apache acepta solicitudes para esta aplicación de Rails en http://www.myapp.com/
entonces Rails usará esa dirección. Es por eso que los métodos *_url
en un entorno de desarrollo apuntan a http://localhost:3000
de manera predeterminada.
El host de image_tag
sugerido en la respuesta anterior solo afectará a los image_tag
, stylesheet_link_tag
y javascript_link_tag
.
Hay esto, pero no estoy muy seguro de si son los ayudantes a los que te refieres:
ActionController::Base.asset_host = "assets.example.com"
http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html
La forma más simple de obtener su url de dominio dinámico usando una variable global en rieles.
class ApplicationController < ActionController::Base
def base_url
$base_url = request.base_url
end
end
Después de simplemente llamar a este método en su archivo de encabezado <% base_url %>
, ahora puede acceder a la URL de su dominio en cualquier lugar de su aplicación.
La solución de NSD es cómo lo hago, pero tuve que agregar un bloque para que funcione con https:
config.action_controller.asset_host = Proc.new { |source, request|
(request ? request.protocol : ''http://'') + "www.subdomain.example.com"
}
Otra forma es configurarlo así
# config/production.rb
config.action_controller.default_url_options = { host: ''myproduction.com'' }
Puede establecer fácilmente :host
o / y :only_path
parámetro :only_path
para cada url_helper. yours_url(params, :host => "http://example.com", :only_path => Rails.env.test?)
esta manera no está configurando global_url_options en sus entornos, a menos que así lo desee.
asset_host
no funciona para las URL
Debes anular las default_url_options
en tu ApplicationController
(al menos en 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