Comment avoir un chemin absolu pour les feuilles de style en mailer avec le pipeline d'actifs?
-
22-10-2019 - |
Question
Les aides de vue dans mon modèle Mailer me donnent des URL par rapport à la feuille de style et des images. Bien sûr, cela ne fonctionnera pas si je consulte l'e-mail dans Gmail, par exemple.
Dans apps/views/layouts/mailer.html.erb
<%= stylesheet_link_tag "application" %>
...
<%= link_to(image_tag("logo.png"), "http://mysite.com") %>
Renders comme:
<link href="/assets/application-c90478153616a4165babd8cc6f4a28de.css" media="screen" rel="stylesheet" type="text/css" />
...
<a href="http://mysite.com"><img alt="Logo" src="/assets/logo-d3adbf8d0a7f7b6473e2130838635fed.png" /></a>
Comment puis-je obtenir Rails pour me donner des liens absolus à la place? Je suis sur Rails 3.1, le pipeline d'actifs est en vigueur.
La solution
`config.action_controller.asset_host gère le préfixe hôte dans les vues générées à partir d'un ActionController.
Pour tout ce qui produit dans un e-mail que vous cherchez ActionMailer options de configuration, plus précisément:
-
ActionMailer::Base.asset_host
va gérer votreimage_tags
et -
ActionMailer::Base.default_url_options[:host]
regardera après vos baliseslink_to
.
par exemple:
ActionMailer::Base.asset_host = "http://blah.com"
ActionMailer::Base.default_url_options[:host] = "blah.com"
Notez que vous n'avez pas besoin de spécifier le préfixe http pour l'hôte URL par défaut, vous voulez pour l'hôte d'actifs.
J'ai indiqué dans ma ces environment.rb après l'initialisation de l'application. Je recommande définition d'une variable de configuration d'application pour chaque domaine d'environnements.
Autres conseils
Pour les rails 3.2 et l'utilisation ActionMailer:
config.action_mailer.asset_host = "http://www.example.com"
Cela peut être un peu un hack, mais si vous spécifiez un hôte d'actifs, tous
Dans ce fil rocketscientist et Joe a demandé à d'autres idées: http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/stylesheet_link_tag Vous pouvez générer Html Css comme suit (si vous ne se soucient pas d'hébergement actif). Cependant répondre par David Radcliffe devrait fonctionner. stylesheet_link_tag "http://www.railsapplication.com/style.css" # =>
<link href="http://www.railsapplication.com/style.css" media="screen" rel="stylesheet" type="text/css" />