2013-03-19 28 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') %>" %> 
相關問題