Asset Pipelineを使用してMailerでStyleSheetsの絶対的なパスを作成するにはどうすればよいですか?
-
22-10-2019 - |
質問
私のメーラーテンプレートのビューヘルパーは、スタイルシートと画像に相対的なURLを提供します。もちろん、たとえばGmailでメールを表示している場合、これは機能しません。
の apps/views/layouts/mailer.html.erb
<%= stylesheet_link_tag "application" %>
...
<%= link_to(image_tag("logo.png"), "http://mysite.com") %>
レンダリングとして:
<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>
代わりにRailsを絶対的なリンクに与えるにはどうすればよいですか?私はRails 3.1にいます、資産パイプラインが有効です。
解決
`config.action_controller.asset_host ActionControllerから生成されたビューでホストプレフィックスを処理します。
あなたが探している電子メールで生成されたもののために ActionMailer 具体的には、構成オプション、より具体的には
ActionMailer::Base.asset_host
あなたを扱いますimage_tags
とActionMailer::Base.default_url_options[:host]
あなたの世話をしますlink_to
タグ。
例えば:
ActionMailer::Base.asset_host = "http://blah.com"
ActionMailer::Base.default_url_options[:host] = "blah.com"
デフォルトのURLホストにHTTPプレフィックスを指定する必要はないことに注意してください。アセットホストにはそうすることに注意してください。
私はこれらを私の中に指定しました Environment.RB アプリケーションの初期化の後。各環境ドメインにアプリケーション構成変数を設定することをお勧めします。
他のヒント
Rails 3.2およびActionMailerの使用の場合:
config.action_mailer.asset_host = "http://www.example.com"
これはちょっとしたハックかもしれませんが、資産ホストを指定すると、すべて ヘルパーはそれを考慮に入れます リンクをレンダリングするとき。だからあなたが設定した場合
config.action_controller.asset_host = "http://mysite.com"
あなたの構成で、 stylesheet_link_tag
ホスト名が含まれます。
このスレッドでは、RocketscientistとJoeが他のアイデアについて尋ねました。
http://apidock.com/rails/actionview/helpers/assettaghelper/stylesheet_link_tag
次のように完全なCSSを生成できます(資産のホスティングを気にしない場合)。ただし、David Radcliffeによる回答は機能するはずです。
stylesheet_link_tag "http://www.railsapplication.com/style.css" # => <link href="http://www.railsapplication.com/style.css" media="screen" rel="stylesheet" type="text/css" />