如何在rails 4中指定asset_host?

Sac*_*ngh 3 actionmailer amazon-s3 amazon-cloudfront ruby-on-rails-4 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
}
Run Code Online (Sandbox Code Playgroud)

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

Sac*_*ngh 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
Run Code Online (Sandbox Code Playgroud)

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