2009-06-07 2 views
1

10 분마다 몇 가지 XML 피드를 파싱하고 render: file 메서드를 사용하여 레일스 프로젝트의 모든 페이지에 포함 할 일부 부분을 만드는 cron 작업이 있습니다. 문제는 서버가 다시 시작될 때까지 새로 고치지 않는다는 것입니다.레일에서 외부에서 수정 된 파일 렌더링

어쨌든 레일스가 매번이 파일을 새로 고치려면 어떻게해야합니까?

미리 감사드립니다.

답변

2

나는 당신이 렌더링 (: 파일)을 잘못 사용하고 있다고 생각합니다. 이것은 분명히 그것이 의도 된 방법이 아닙니다. 부분 렌더링은 데이터로드 기술이 아닌 여러 위치에서 erb (또는 사용하는 템플릿 랭) 코드를 렌더링하는 데 사용됩니다. 동적으로 변하는 데이터를로드하는 데 사용하고 있습니다 (나타납니다).

당신이 정말로하려는 것은 조각 캐싱이지만, 더 많은 컨텍스트가 없으면 틀릴 수도 있습니다. 조각 캐싱에 큰 연습을 위해

: http://www.railsenvy.com/2007/3/20/ruby-on-rails-caching-tutorial-part-2

아마 당신은 캐시 찾고있는 조각을 만들 것입니다 스크립트/주자 스크립트를 실행 할 사용자의 cron 작업.

내가 여기에 근거가없는 경우 어떤 파일 유형을로드하고 무엇을 달성하려고하는지 명확히 밝혀주세요. 대신

+0

동의합니다. 조각 캐시와 같은 소리가 그 일을 할 것입니다. cron 작업이 프래그먼트 캐시를 만료 시키면 erb가 실행되고 다음에 표시 될 때 캐시됩니다. – Shadwell

1

이 문제는 프로덕션 모드에서 레일스가 모든 클래스와 뷰/부분을 캐싱하기 때문에 발생합니다. 이 문제를 해결하려면 부분 캐싱 블록 안에 부분을 렌더링하고 블록 내용을 새로 고칠 때 메서드 expire_fragment를 사용할 수 있습니다. 다른 방법으로는 개발 모드로 전환 할 수 있지만 응용 프로그램의 속도가 느려집니다.

+2

솔루션은 물론 개발에서 응용 프로그램을 실행되고 있지 않습니다. 그것은 끔찍한 생각입니다. 덜 끔찍하지만 여전히 끔찍한 생각은 생산 과정에서 클래스를 다시로드하는 것입니다. 그러나 이것은 최악의 시나리오입니다. –

6

사용 :

render :inline => File.read(file_name), :layout => true 
관련 문제