Comment css lors de l'utilisation de rails asset pipeline
Au lieu d'avoir la page d'inclure une balise style avec un lien où trouver le css de qui je pourrais ajouter à mon point de vue à l'aide de rails stylesheet_link_tag
méthode d'assistance, je veux avoir le css inline directement à l'intérieur de la page.
C'est ce que j'ai trouvé jusqu'à présent:
%style(type="text/css")=File.read(physical_asset_path("email.css"))
Mais je ne trouve pas de rails' aide de la méthode qui me donne le chemin d'accès physique d'un actif - physical_asset_path
est juste un mannequin méthode inventée par moi.
Quelqu'un sait comment obtenir le chemin d'accès physique d'un actif lors de l'utilisation de rails 3.2.x?
Est-il un moyen plus facile/mieux pour obtenir les feuilles de style - à partir de fichiers css à l'intérieur de la commune rails actifs chemins - inline?
Cas d'utilisation: la plupart des clients de messagerie n'ont pas accès à des sources externes (comme css, images) sans confirmation de l'utilisateur. Afin de recevoir les emails affichés correctement j'ai besoin d'intégrer le CSS à l'intérieur de la e-mails HTML.
Vous devez vous connecter pour publier un commentaire.
Utilisation premailer ou premailer-rails3
https://github.com/fphilipe/premailer-rails3
ou
https://github.com/alexdunae/premailer
Joe Nerd Partie dire:
Mise à jour:
Roadie semble être une meilleure option. Grâce à Seth Bro pour le pointant à l'extérieur.
Rails.application.assets.find_asset('email').to_s
sera de retour la compilation des actifs comme une chaîne de caractères..html_safe
afin de ne pas échapper les guillemets:Rails.application.assets.find_asset('email').to_s.html_safe
%style{type:"text/css"}= Rails.application.assets.find_asset('email_stylesheet').to_s
dans la section head de votre e-mail.html.haml fichier avec l'premailer-gem rails, le css est trouvé, compilé et inline - yay! de travail des e-mails html!%style{:type => "text/css", :'data-roadie-ignore' => true} = Rails.application.assets['email'].to_s.html_safe
File.read("#{Rails.root}/public/assets/#{Rails.application.assets_manifest.files.collect{|k, v| k if v['logical_path'] == 'email.css' }.compact.first}").html_safe
(Désolé de cette réponse est en
html
, pasHAML
... mais ça ne devrait pas être un problème pourHAML
fans)J'ai trouvé cette question lors de la recherche d'un moyen de inline
Sass
compilé commecss
enhtml
pour la création de modèles d'e-mail html.Combinant les conseils ci-dessus, j'ai utilisé le code suivant dans la
head
de monhtml
page:Ce code compile
Sass
commeCSS
et insère ensuite le css dans un<style>
tag. Lehtml_safe
s'assure que toutes les citations ('
et"
) ou des crochets (>
et<
) utilisé dans les css ne sont pas échappé.La
path/to/sass/file
est le même que vous utilisez lors de la création d'une feuille de style de la balise lien:Rails.application.assets['asset.js']
ne fonctionnera que dans l'environnement local, comme les rails de l'actif de la compilation est désactivé à la fois la production et l'environnement de test.Rails.application.assets_manifest.find_sources('asset.js').first.to_s.html_safe
doit être utilisé pour du css lors de l'utilisation de rails asset pipeline.Ne pouvez pas ajouter de commentaire à Seth Bro réponse. Vous feriez mieux d'utiliser
#[]
au lieu de#find_asset
:Rails.application.assets["email"].to_s
.Re "actif ne sera pas compressé". Ce n'est pas vrai. Il sera compressé si vous avez des compresseurs activé (dans les rails de config):
Avis, que par défaut, cette option est activée dans l'environnement de production (
config/environments/production.rb
).J'essayais de css pour utiliser dans google amp pages compatible avec les rails. J'ai trouvé le suivant helper de vyachkonovalov qui était la seule chose pour moi de travailler dans la production et localement.
Ajouter le texte suivant à la
erb
modèle:Et l'aide à
ApplicationHelper
. Il fonctionne parfaitement en local et dans la production.tl;dr (sans Roadie):
Pour appliquer le CSS styles en ligne, je vous recommande de roadie-rails (qui est un des Rails de wrapper pour Roadie). Il a également d'autres fonctionnalités intéressantes comme l'absolutisation de
href
s,src
s etc.De l'utilisation de la combinaison de deux inline (
email.scss
) et non inline (email_responsive.css
) les feuilles de style, résidant dansapp/assets/stylesheets
:Eu le même problème, résolu en utilisant @phlegx réponse à un problème similaire dans Premailer.
Pour un environnement sécuritaire solution dont vous avez besoin pour utiliser
Je l'ai emballé dans un helper dans mon application:
Vous pouvez utiliser ceci: