Chr*_*son 23 ruby-on-rails actionmailer ruby-on-rails-3 asset-pipeline
我希望我用ActionMailer发送的电子邮件包含链接回我的应用程序的图像.在我的开发环境中,例如:
<img src="http://myfullappurl.dev/assets/myimage.png">
Run Code Online (Sandbox Code Playgroud)
我在我的开发中有这个.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 }
Run Code Online (Sandbox Code Playgroud)
但我不能让我的邮件模板以这些方式呈现完整的URL:
asset_path('myimage.png')
asset_path('myimage.png', only_path: false)
image_url('myimage.png')
Run Code Online (Sandbox Code Playgroud)
通过这样的方式回答了很多关于这个主题的类似问题:
"#{request.protocol}#{request.host_with_port}#{asset_path('image.png')}"
Run Code Online (Sandbox Code Playgroud)
但是因为我的邮件是与Sidekiq异步发送的,所以没有任何request对象,如果它们是在控制器中同步发送的话.
有没有明显的东西我想念,或者我是否必须与Rails作斗争才能做到这一点?我正在使用Rails 4,但我确信在3.1/3.2中有效的任何东西都可以.
Chr*_*son 44
这是奇怪的行为,但我已经解决了这个问题.事实证明,除非action_mailer.asset_host以此开头,否则http://它将被忽略.有一个正则表达式actionpack/lib/action_view/helpers/asset_url_helper.rb定义了一个有效的ActionMailer URI:
URI_REGEXP = %r{^[-a-z]+://|^(?:cid|data):|^//}
Run Code Online (Sandbox Code Playgroud)
但是,如果你把一个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'
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,这是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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17007 次 |
| 最近记录: |