2

如果我有一个使用 PJAX 或 Turbolinks 的应用程序,那么当新代码部署到服务器时我会看到一个问题——比如 Heroku。问题是正在访问该应用程序的用户将继续使用该应用程序以前版本中的 Javascript(因为它已经加载到浏览器中),但会从新版本中获取 HTML 页面。有时,新的 HTML 代码假定新的 Javascript 已加载,因此无法正常工作。

其他人注意到这个问题了吗?你怎么办?这似乎也是单页 Javascript 应用程序(如基于 Backbone 和 Ember 的应用程序)的常见问题。Meteor 至少无缝升级了客户端中的代码,作为处理这个问题的一种方式。

4

3 回答 3

1

https://github.com/rails/turbolinks/#asset-change-detection看起来像是答案。在您的脚本标签中,放置 data-turbolinks-track。然后我假设发生的情况是,当 turbolinks 加载页面时,它会查找该脚本标记,如果 URL 已更改(如果您使用资产管道,它将自动更改)然后它会为您重新加载整个页面。

于 2013-03-01T06:36:39.923 回答
0

以 pivotaltracker 为例,他们检查客户端连接并在新版本到达时强制用户重新加载客户端。

只要您不在应用程序中提供向后兼容性,您就无能为力。

于 2013-02-28T17:30:03.633 回答
0

如果您使用的是 Pjax,则可以添加

<meta http-equiv="x-pjax-version" content="v123">

到你的标题。您可以为内容属性使用服务器定义的值,然后在部署之前,只需确保该值已更新。部署后,后续 Pjax 请求将看到此标头已更新,取消它的 Ajax 请求,并拉下整个页面重新加载。

对于 Turbolinks 5,您可以data-turbolinks-track="reload"在标题中添加脚本和样式表链接。Turbolinks 将监视这些文件以了解每个请求的更改。然后在部署时,就像 Pjax 一样,它会请求重新加载整个页面。

Classic Turbolinks 只需要该属性data-turbolinks-track

您可以在 Pjax 的 GitHub 页面上阅读更多内容并查看其他功能:https ://github.com/defunkt/jquery-pjax或 Turbolinks:https ://github.com/turbolinks/turbolinks 。

对于 Turbolinks Classic:https ://github.com/turbolinks/turbolinks-classic

于 2016-09-22T17:29:00.250 回答