如何在rails 4中指定asset_host?

时间:2014-05-02 06:58:58

标签: ruby-on-rails-4 amazon-s3 actionmailer amazon-cloudfront ruby-2.1

我使用Amazon S3进行文件上传,使用Cloudfront进行静态资产服务,在我的config / environments / staging.rb中,我写了

ActionController::Base.asset_host = Proc.new { |source|
  if source.include?('/assets')
    "d1xw0c7m8has5k.cloudfront.net"
  else
    "#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
  end
}

ActionMailer::Base.asset_host = Proc.new { |source|
  if source.include?('/assets')
    "d1xw0c7m8has5k.cloudfront.net"
  else
    "#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
  end
}

但是在我的邮件中,通过rails应用程序发送,我看到image_tag src属性为空? 即没有显示图像。 我无法识别此设置有什么问题,请帮助。

1 个答案:

答案 0 :(得分:9)

我通过将这些配置放在config / environments / staging.rb

中的块中来解决此问题
Demo::Application.configure do
  config.action_controller.asset_host = Proc.new { |source|
    if source.include?('/assets')
      "d1xw0c7m8has5k.cloudfront.net"
    else
      "#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
    end
  }

  config.action_mailer.asset_host = Proc.new { |source|
    if source.include?('/assets')
      "http://d1xw0c7m8has5k.cloudfront.net"
    else
      "http://#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
    end
  }

end

并且有必要提供带有action_mailer asset_host的协议,即' HTTP'