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 以 then 开头,否则http://它将被忽略。有一个 Regexactionpack/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。

于 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 回答