Phusion Passenger을 사용하여 배포 된 레일 사이트에서 유지 보수 작업을하고 있습니다. 워크 플로우는 표준 3 단계 Railsian 테스트 - 개발 - 생산 배열과 조금 다릅니다. 대신, 병렬 Oracle 데이터베이스에 대해 실행되는 동일한 코드베이스의 두 가지 개별 설치가 있습니다. 개발 사이트는 qa.domain.com에 있으며, 라이브 사이트는 www.domain.com에 있습니다.레일 : dev 및 생산에 대한 다른 동작
다음 코드 조각 (AuthenticatedSystem을 사용하는 vendors_controller.rb)에서 다른 동작이 발생합니다.
주석 사이의 코드는 시스템이 해당 등록을 작성할 수없는 경우 방금 작성된 사용자 오브젝트를 삭제합니다. 개발 서버에서는 정상적으로 작동하지만 프로덕션 서버에서는 작동하지 않습니다. 프로덕션 서버에서는 등록을 저장하지 않아도 User 오브젝트가 데이터베이스 주위를 고집합니다. 컨트롤러 파일을 업로드하고 쉘을 통해 touch tmp/restart.txt
을 수행하는 것만 큼 변경 사항을 프로덕션으로 보내면됩니다. 두 코드베이스는 다른 경우 동일합니다. 이 차이를 일으키는 원인은 무엇일까요?
감사합니다.
저스틴
편집 : 문제를 진단 할 수있는 두 개의 설치를 통해 production.rb
에서 약간의 차이가 있습니다. 생산시에,
config.cache_classes = true
# Full error reports are disabled and caching is turned on
config.action_controller.consider_all_requests_local = false
config.action_controller.perform_caching = true
개발 중에는, 3 개의 플래그가 그 역의 값으로 설정됩니다. 감사! 말로 미루어 보아, 당신이 사용하지 않는 거래 당신은 컨트롤러
에 너무 많은 일을하고
- :
응답 해 주셔서 감사합니다. jonnii ... 많이 감사드립니다! 코드를 직접 작성하지는 않았습니다. 단지 디버깅하는 것입니다.하지만 솔루션은 훨씬 더 우아합니다. 또한 문제는 Phusion 여객기와 관련이 있음이 밝혀졌습니다. 필자는 파일의 이전 버전을 'vendors_controller_031610.rb'로 이름을 바꿨습니다. 신속하게 되돌릴 필요가 있었을 때를 대비하여 Phusion이 다시 시작한 후에도 오래된 컨트롤러를 사용하고있는 것으로 나타났습니다. 이전 파일을 삭제하면 문제가 해결됩니다. 이상 하네, 응? – justinbach