2013-03-19 39 views
21

我希望通过ActionMailer发送的电子邮件包含链接回我的应用程序的图像。在我的开发环境,例如:如何获取Rails异步邮件程序中图像的完整URL?

<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') 

很多关于这一主题类似的问题被做这样的事情回答

但是因为我的邮件是与Sidekiq异步发送的,所以没有request对象,就像它们在控制器中同步发送一样。

有没有一个明显的东西我失踪了,还是我必须与Rails做斗争?我使用的是Rails 4,但我相信任何在3.1/3.2中工作的应该都可以。

回答

37

嗯,这是奇怪的行为,但我已经解决了这个问题。事实证明,除非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' 

只是要清楚,这是与正在与Sidekiq异步发送这些电子邮件的Rails 4.0.0beta1,我不知道这影响的Rails 3

+0

谢谢。这是让rails 4.1.1在HTML电子邮件中显示完整图像URL的解决方案。对SO的另一个低估的答案是 – 2014-06-23 22:28:19

+0

。 也,我认为它更好地使用https在大多数情况下不是开发环境。 – 2015-04-19 11:58:16

+0

将协议添加到'action_controller.asset_host'时,我没有遇到任何问题,不知道该行为是否已更改。修复本身就像描述的那样工作。 :) – lime 2015-06-30 11:29:14

8

我相信你需要设置这些在你的配置

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

我已经配置好了。在开发中使用Pow,因此扩展名为.dev。 – 2013-03-19 04:59:56

2

环境中的文件(即development.rb): -

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

在邮件视图文件: -

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

<img src="<%= image_url('image.jpg') %>" %> 
相关问题