5

개발 용 레일 서버에서 실행되는 iPhone 클라이언트 테스트가 있습니다. 레일스 설정에서 클래스 캐싱을 켜면 전체 제품군의 처리 속도가 빨라집니다. 반면에 실제로 테스트를 실행하지 않을 경우 개발 속도가 느려집니다.Rails 3에서 프로그래밍 방식으로 config.cache_classes를 변경할 수 있습니까?

클래스를 캐싱하고 마지막에 다른 작업을 시작하기 위해 테스트 스위트가 처음에 작업에 부딪쳐 클래스 캐싱이 다시 해제되기를 바란다.

이것도 가능합니까? 그렇다면 어떻게?

답변

0

나는 당신이 제안하는 것을하는 것이 효과가 없을 것이라고 생각합니다.

하지만 잘못된 해결책을 찾고있는 것이 좋습니다.

iphone 테스트에서 개발 데이터베이스에 액세스하려는 경우 새 환경을 추가하지 않는 것이 좋습니다.

추가 새 파일 설정/환경/iphone_dev.rb

require File.dirname(__FILE__)+"/development.rb" 
config.cache_classes = true 

그리고 당신의 database.yml을 (mongoid.yml 또는 무엇이든 또는)

iphone_dev: 
    host: localhost 
    database: my_app_development 

이유는 데이터베이스 질수가 없습니다에

(가) 같은

지금 바로 실행할 수 rails server -eiphone_dev -p3001

당신이해야 귀하의 dev 서버와 거의 같은 서버, 을 가지고 있지만 다른 포트에서 실행 중입니다. 캐싱이 활성화되어 있습니다.

+0

두 개의 서버를 병렬로 실행하는 것은 좋지 않지만 문제를 해결하는 것은 아닙니다. 변경을 수행 할 때마다이 새 테스트 서버를 다시 시작해야합니다. – ilya

+0

'성가신 재시작으로 빠른 요청'또는 '자동로드 변경 요청 느림'을 결정해야 할 수도 있습니다. –

+0

그래, 그게 현재의 사건입니다. 나는 단지 특정 시간 동안 "빠른 모드"를 켤 수 있기를 원한다. – ilya

1

심각한 해킹을하지 않아도됩니다. Rails는 모든 요청 (cache_classes=false)에 파일이 다시로드되는지 확인하는 데 많은 어려움을 겪습니다. cache_classes 구성 변수의 값은 여러 장소에서 초기화에 의해 사용되는 적은이 아닙니다 존재의 : cache_classes이 true

  • (더 이상 재충전있는 의미가없는) 설정 때 루비 파일을로드 할 require를 사용하여

    • cache_classes 당신은 cache_classes 변수의 값에 액세스 할 false

    때 디스패처 콜백은 모든 요청에 ​​응용 프로그램을 reaload하고, 만약 당신이 좋아하면 당신도 변경할 수 있습니다 :

    Rails.configuration.cache_classes = true 
    

    그러나, 이것은 그 값이 레일 응용 프로그램이 시작될 때 한 번만 실행 사용되는 초기화로 실행중인 레일 인스턴스에 영향을주지 않습니다.

    중요한 것은 심각한 시간과 해킹 노력에 투자하지 않으면 서버를 다시 시작할 수 없다는 뜻입니다. 따라서 살펴볼 필요가있는 것은 테스트 스위트를 통해이 재시작 프로세스를 제어하는 ​​것입니다.

    예를 들어 rails from within rails을 다시 시작할 수 있습니다.이렇게하면 테스트 스위트가 실행을 시작하기 직전에 올바른 모드로 서버를 다시 시작하는 동작과 모든 테스트가 완료된 후 서버가 히트 할 수있는 동작을 정의하여 cache_classes 집합으로 모든 작업을 다시 시작할 수 있습니다 예전의 모습으로 환경 변수 like this post suggests을 통해 캐시 클래스의 값을 제어 할 수 있습니다.

    이 모든 것을 설정하고 함께 사용하려면 약간의 작업이 필요하지만 '자동 마법의'솔루션을 원한다면이 방법이 최선의 방법 일 것입니다.

  • 관련 문제