ActionMailerで送信するメールに、アプリにリンクする画像を含めたいです。私の開発環境では、例えば:
<img src="http://myfullappurl.dev/assets/myimage.png">
私は私のdevelopment.rbにこれを持っています
config.action_controller.asset_Host = 'myfullappurl.dev'
config.action_mailer.asset_Host = config.action_controller.asset_Host
config.action_mailer.default_url_options = { Host: 'myfullappurl.dev', only_path: false }
しかし、メールテンプレートで次のいずれかの方法で完全なURLをレンダリングすることはできません。
asset_path('myimage.png')
asset_path('myimage.png', only_path: false)
image_url('myimage.png')
このトピックに関する同様の質問の多くは、次のようなことで答えられます。
"#{request.protocol}#{request.Host_with_port}#{asset_path('image.png')}"
ただし、メールはSidekiqで非同期に送信されるため、コントローラーで同期的に送信された場合のようなrequest
オブジェクトはありません。
私が見逃している明らかなものはありますか、またはRailsこれを行うために戦う必要がありますか?私はRails 4を使用していますが、 3.1/3.2で機能するものはすべて問題なく動作します。
これは奇妙な動作ですが、この問題は解決しました。 action_mailer.asset_Hostがhttp://
で始まっていない限り、無視されることがわかりました。 actionpack/lib/action_view/helpers/asset_url_helper.rb
には、有効なActionMailer URIを定義する正規表現があります。
URI_REGEXP = %r{^[-a-z]+://|^(?:cid|data):|^//}
ただし、http://
をaction_controller.asset_Host
の前に配置すると、http://http://myfullappurl.dev
へのリンクが作成されます。
それを解決するには、次のコードをdevelopment.rb
に追加する必要がありました。
config.action_controller.asset_Host = 'myfullappurl.dev'
config.action_mailer.asset_Host = 'http://myfullappurl.dev'
明確にするために、これはRails 4.0.0beta1であり、Sidekiqで非同期にメールが送信されます。これがRails 3.に影響するかどうかはわかりません。
私はあなたがあなたの設定でこれらを設定する必要があると信じています
config.action_controller.asset_Host = 'http://localhost:3000' #Or your domain
config.action_mailer.asset_Host = config.action_controller.asset_Host
あなたの環境ファイル(つまり、development.rb)に:
config.action_mailer.asset_Host = 'http://localhost:3000' #Or your domain
メーラービューファイル:-
<%= image_tag('image_name.jpg') %>
または
<img src="<%= image_url('image.jpg') %>" %>