ruby-on-rails - Rails Assets 管道 : How to prevent caching of a specific asset

标签 ruby-on-rails caching asset-pipeline

如标题所述,我想防止缓存特定 Assets ,即 javascript 文件 something.js.erb .情况如下:
something.js.erb的内容:

...
var something = <%= SomethingHelper.get_something.to_json %>;
...

它绑定(bind)来自 SomethingHelper 的值成功但只有一次,除非 javascript 文件是手动编辑的,否则 var something 的值永远不会再次分配。

这可能在某种程度上是意料之中的,但显然不能满足我的需求。 SomethingHelper.get_something 的输出根据通话时间变化。所以我需要在我编译的 something.js 中查看最新数据文件。

我的确切需求:
  • 我不想整体禁用 Assets 管道缓存
  • 我只想要something.js.erb每次请求时都会呈现。

  • 这甚至可能吗?

    环境信息:
  • rails 4
  • 发展模式
  • Rails 自己的服务器,但将在 prod
  • 上的 nginx 上

    谢谢

    最佳答案

    我可以建议 2 个选项:

    1)使用内联js设置变量:

    <%= javascript_tag do %>
      window.something = '<%= j SomethingHelper.get_something.to_json %>';
    <% end %>
    

    2)将变量存储在您的html中并从您的js中调用它:
    #html
    
    <body data-something="<%= j SomethingHelper.get_something.to_json %>">
    </body>
    
    #js
    
    $("body").data("something");
    

    关于ruby-on-rails - Rails Assets 管道 : How to prevent caching of a specific asset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16731329/

    相关文章:

    ruby-on-rails - Rails 3 Assets 和 CSS 相对 URL

    ruby - sinatra 应用程序中的 Assets 管道

    ruby-on-rails - heroku/rails Assets 预编译给出 SASS 错误

    ruby-on-rails - 根据 db/schema.rb 中的内容创建模型

    ruby-on-rails - Rails find_or_create_by 多个属性?

    caching - 如何将当前缓存实例传递到服务/ Controller 中?

    c - 系统如何确保内存和缓存之间的一致性

    ruby-on-rails - Mailgun 帐户注册后很快就被禁用

    ruby-on-rails - Ruby on Rails Web应用程序到iOS还是Android应用程序?

    php - 缓存问题 MySQL 或 Filesystem