如何在Rails异步邮件程序中获取映像的完整URL?

我希望我用ActionMailer发送的电子邮件包含链接回我的应用程序的图像。 在我的开发环境中,例如:

 

我在我的开发中有这个.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中有效的任何东西都可以。

这是奇怪的行为,但我已经解决了这个问题。 事实certificate,除非action_mailer.asset_host以http://开头,否则它将被忽略。 actionpack/lib/action_view/helpers/asset_url_helper.rb中有一个Regex,用于定义有效的ActionMailer URI:

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

但是,如果您在action_controller.asset_host前放置一个http:// ,那么您最终会得到指向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') %> 

要么