如何在 Rails 4 中指定asset_host?

Posted

技术标签:

【中文标题】如何在 Rails 4 中指定asset_host?【英文标题】:how to specify asset_host in rails 4? 【发布时间】:2014-06-18 19:21:10 【问题描述】:

我使用 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】:

我通过将这些配置放在 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_mailerasset_host的协议,即'HTTP'

【讨论】:

以上是关于如何在 Rails 4 中指定asset_host?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在我的 Gemfile 中指定确切的版本吗?

如何在 Xcode 4 中指定命令行参数?

如何在 LoopBack 4 模型中指定没有时间的日期?

在“引用”迁移中指定列名

无法在 AngularJS 中的请求中指定标头

如何在 d3.scale.ordinal() 中指定域?