25

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で動作するものはすべて問題なく動作するはずです。

4

3 に答える 3

45

これは奇妙な動作ですが、私はこの問題を解決しました。action_mailer.asset_host で始まらない限りhttp://無視されることがわかりました。actionpack/lib/action_view/helpers/asset_url_helper.rb有効な ActionMailer URI を定義する正規表現があります。

URI_REGEXP = %r{^[-a-z]+://|^(?:cid|data):|^//}

ただし、のhttp://前にa を付けると、への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 に影響するかどうかはわかりません。

于 2013-03-21T04:31:14.423 に答える
9

これらを設定で設定する必要があると思います

config.action_controller.asset_host = 'http://localhost:3000' #Or your domain
config.action_mailer.asset_host = config.action_controller.asset_host
于 2013-03-19T03:23:36.657 に答える
3

環境ファイル (つまり、development.rb) で:-

config.action_mailer.asset_host = 'http://localhost:3000' #Or your domain

あなたのメーラービューファイルで: -

<%= image_tag('image_name.jpg') %>

また

<img src="<%= image_url('image.jpg') %>" %>
于 2014-06-24T15:42:08.290 に答える