ruby - example - rails carrierwave image_tag
Obtener url absoluta(base) en sinatra (2)
En este momento, hago una
get ''/'' do
set :base_url, "#{request.env[''rack.url_scheme'']}://#{request.env[''HTTP_HOST'']}"
# ...
haml :index
end
para poder usar options.base_url en HAML index.haml. Pero estoy seguro de que hay una forma mucho mejor de hacerlo, DRY. Sin embargo, no puedo verlo, ni encontrarlo. (Soy nuevo en Sinatra :))
De alguna manera, fuera de get , no tengo request.env disponible, o eso parece. Así que ponerlo en una inclusión no funcionó.
¿Cómo obtienes tu url base?
Puede obtenerlo utilizando request.base_url
too = D (eche un vistazo a rack/request.rb )
Un par de cosas.
-
set
es un método de nivel de clase, lo que significa que está modificando el estado de la aplicación completa con cada solicitud - Lo anterior es un problema porque potencialmente, la URL base podría ser diferente en diferentes solicitudes, por ejemplo,
http://foo.com
yhttps://foo.com
o si tiene varios dominios apuntando al mismo servidor de aplicaciones usando DNS
Una mejor táctica podría ser definir un ayudante.
helpers do
def base_url
@base_url ||= "#{request.env[''rack.url_scheme'']}://#{request.env[''HTTP_HOST'']}"
end
end
Si necesita la url base fuera de la respuesta a las consultas (no en un bloque obtener / publicar / poner / eliminar o una vista), sería mejor configurarlo manualmente en algún lugar.