Rails 5 - 用户指定的CSS无法在Heroku上使用自定义域

时间:2017-11-30 10:12:28

标签: css ruby-on-rails heroku cloudflare

我想为用户添加一种方法,指定在网站上使用的几种颜色,而不是我的核心CSS中的基本颜色。我已经通过下面的代码完成了这个,但它不能在我的Heroku托管生产环境中工作,特别是具有自定义域和通过Cloudflare路由的DNS(即它适用于my-app.herokuapp.com但不适用于www。 my-custom-domain.com)。如果我直接在浏览器中打开自定义CSS文件(通过页面源)并刷新它,那么CSS将反映在网站上。这是Heroku的限制吗? CloudFlare的?我的方法不太理想吗?

视图/布局/ application.html.erb:

<html>
  <head>
    ...
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => 'reload' %>
    <% if the user is signed in and has selected custom colors %>
      <%= stylesheet_link_tag(application_custom_colors_path(format: :css), media: 'all', 'data-turbolinks-track' => 'reload' ) %>
    <% end %>
    ...
  </head>
</html>

application_controller.rb

def custom_colors
  @color1 = current_user.color1
  @color2 = current_user.color2
  respond_to do |format|
    format.css
  end
end

视图/应用/ custom_colors.css.erb

body {
  color: <%= @color1 %>;
}

正如我上面所说,这可以在我的本地计算机上运行并使用他们的标准my-app.herokuapp.com域部署到Heroku,但是当通过Cloudflare使用自定义域时它不再起作用。非常感谢任何指导。

页面来源:

<link rel="stylesheet" media="all" href="/assets/application-3fac9a8b9a23a84ee912eb6f5438eff5514038c3646ef0a547ebb512994b6ca4.css" data-turbolinks-track="reload" />
<link rel="stylesheet" media="all" href="/application/custom_colors.css" data-turbolinks-track="reload" />

1 个答案:

答案 0 :(得分:0)

默认情况下,Cloudflare会使用某些扩展(包括CSS和Javascript)缓存所有静态内容。为了解决这个问题,我在Cloudflare帐户中添加了一个页面规则,以绕过www.mycustomdomain.com/application/custom_colors.css的缓存。更多信息here