ruby-on-rails - CSS中图像上的Rails时间戳

标签 ruby-on-rails apache

因此,Rails时间戳记很棒。我正在使用它将过期 header 添加到所有以10位数时间戳记结尾的文件。但是,我的大多数图像都是在CSS中引用的。有没有人遇到过任何允许将时间戳添加到CSS引用的图像的方法,或实现此目的的一些时髦的重写规则?我希望网站中的所有图像(内联和CSS)都具有此时间戳,因此我可以告诉浏览器对其进行缓存,但是只要文件本身发生更改,都可以刷新。

我在网上找不到任何与此相关的内容,而且我不认为这不是一个讨论频率更高的话题。

我认为我的设置并不重要,因为基于10位数的时间戳,实际的到期时间有望以相同的方式发生,但是我使用apache来提供所有静态内容

最佳答案

您可以通过获取文件修改时间来附加每个图像文件的实际时间戳,如下所示:

    source.gsub!(/url\((['"]*)(.+)(['"]*)\)/) do
      open, file, close = $1, $2, $3
      css_dir = File.join(RAILS_ROOT,"public/stylesheets")
      timestamp = ''
      FileUtils.cd(css_dir) do 
        if file =~ /^\// # absolute path
          f = File.new(RAILS_ROOT + "/public" + file)
        else # relative path
          f = File.new(file)
        end
        timestamp = f.mtime.to_i.to_s
      end

      if file =~ /.\.(ico|css|js|gif|jpe?g|png)/
        "url(#{open}#{file}?#{timestamp}#{close})"
      else
        "url(#{open}#{file}#{close})"
      end
    end

(可能有一种更优雅的书写方式,我的 ruby 印章仍然很薄弱!)
现在,骇客变得越来越丑陋,但是...您可能会想像一种更类似于Rails的方式来做到这一点。

关于ruby-on-rails - CSS中图像上的Rails时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394171/

相关文章:

ruby-on-rails - 在 rails 中添加逗号分隔列表的链接

javascript - 在 Ruby on Rails 中执行远程 (ajax) 调用的正确方法

ruby-on-rails - Rails-Tinytds崩溃的 ruby

python - 访问域:port instead of IP:port

apache - Web服务器缓存-内存与操作系统

ruby-on-rails - 让最终用户在 Rails 中指定排序顺序的最佳方式

ruby-on-rails - 使用线程时处理 Rails 中的循环依赖

regex - 使用 htaccess 将文件夹重定向到另一个文件夹

linux - 配置 Apache Tomcat 以运行 PHP

Apache CXF - 设置 HTTP header