2013-02-28 5 views
2

PJAX 또는 Turbolinks를 사용하는 응용 프로그램을 사용하는 경우 새 코드가 서버에 배포 될 때 문제가 발생합니다 - 예 : Heroku. 문제는 응용 프로그램에 액세스하는 사용자가 이전 버전의 응용 프로그램에서 자바 스크립트를 계속 사용하지만 (브라우저에 이미로드되어 있으므로) 새 버전에서 HTML 페이지를 가져 오는 것입니다. 때때로 새로운 HTML 코드는 새로운 자바 스크립트가로드되어 상황이 제대로 작동하지 않는다고 가정합니다.PJAX 또는 Turbolinks 응용 프로그램을 완벽하게 배포

다른 사람들이이 문제를 발견 했습니까? 당신은 그것에 대해 무엇을합니까? 이것은 단일 페이지 자바 스크립트 응용 프로그램 (Backbone 및 Ember 기반 응용 프로그램과 같은)에서도 공통적 인 문제인 것처럼 보입니다. Meteor는이 문제를 해결할 수있는 방법으로 클라이언트의 코드를 적어도 완벽하게 업그레이드합니다.

답변

1

https://github.com/rails/turbolinks/#asset-change-detection는 대답과 같습니다. 스크립트 태그에 data-turbolinks-track을 입력하십시오. 그런 다음 터보 링크가 페이지를로드 할 때 해당 스크립트 태그를 찾고 URL이 변경된 경우 (애셋 파이프 라인을 사용하면 자동으로 변경됨) 전체 페이지가 다시로드됩니다. 당신이 Pjax를 사용하는 경우

+0

그래 상기 turbolinks 원본 : 경우 assetsChanged doc에 document.location.reload() – fabspro

+0

https://github.com/rails/turbolinks/blob/master/lib/ assets/javascripts/turbolinks.js. 커피 # L34 – fabspro

0

예를 들어 pivotaltracker를 사용하면 클라이언트 연결을 확인하고 새 버전이 도착하면 사용자에게 클라이언트를 다시로드하도록합니다.

앱 내에서 이전 버전과의 호환성을 제공하지 않는 한 수행 할 수있는 다른 작업은 없습니다.

0

, 당신은 당신의 헤더에

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

를 추가 할 수 있습니다. content 속성에 대해 서버 정의 값을 사용할 수 있으며 배포하기 전에 값이 업데이트되었는지 확인하십시오. 배포가 완료되면 후속 Pjax 요청에서이 헤더가 업데이트 된 것을보고 Ajax 요청을 취소하고 전체 페이지를 다시로드합니다.

Turbolinks 5의 경우 헤더의 스크립트 및 스타일 시트 링크에 ​​data-turbolinks-track="reload"을 추가 할 수 있습니다. 터보 링크는 각 요청에 대한 변경 사항에 대해 이러한 파일을 감시합니다. 그런 다음 Pjax와 마찬가지로 배포시 전체 페이지를 다시로드해야합니다.

클래식 터보 링크는 대신 data-turbolinks-track 속성이 필요합니다.

Pjax의 GitHub 페이지 (https://github.com/defunkt/jquery-pjax 또는 Turbolinks : https://github.com/turbolinks/turbolinks)에서 더 많은 내용을 읽고 다른 기능을 볼 수 있습니다. Turbolinks 고전 들어

: https://github.com/turbolinks/turbolinks-classic