2013-09-21 3 views
2

저는 appengine의 새로운 "Modules API"을 검토하고 가장 까다로운 작업이 모듈 구성을 통해보다 강력한 인스턴스로 전달되도록 dispatch.yaml을 통해 라우팅하는 방식으로 앱을 구성하려고합니다.모듈에서 appengine mapreduce 작업을 실행하는 방법은 무엇입니까?

그러나 디스패처에서 "/mapreduce/"URL을 구성하려고 시도하면 올바른 모듈에서 실행되는 것처럼 보이지 않으며 항상 기본 모듈에서 실행됩니다.

발송자는 다음과 같습니다

application: simple-sample 
dispatch: 
    - url: "*/mapreduce/*" 
    module: bigger-instance 

    - url: "*/_ah/pipeline/*" 
    module: bigger-instance 

모듈은, 문서 상태로 정의 맵리 듀스 핸들러 항목을 포함 bigger-instance.yaml에서 app.yaml 기본적 더 큰 인스턴스하지만, 지금까지 모든 맵리 듀스/* 프로세스가 실행된다 핸들러는 다른 곳에서 정의되기 때문에 로그에 따라 기본 핸들러에서 404를 얻습니다.

아이디어가 있으십니까?

답변

3

가장 간단한 옵션은 mapreduce 파이프 라인의 속성을 target으로 설정하는 것입니다.

pipeline = mapreduce.mapreduce_pipeline.MapreducePipeline(...) 
pipeline.with_params(target="version-dot-module") 
pipeline.start() 

target는 작업 큐에 전달하고 경험 한 태스크 큐 default routing을 무시한다. 지정된 모듈의 일치하는 v 전이없는 경우, 모듈의 기본 v 전이 사용됩니다. 단지 "version"을 지정할 수 있으며,이 경우 기본 모듈이 적용됩니다. 존재하지 않는 모듈을 지정하면 일치하는 버전의 기본 모듈이 있더라도 기본 모듈의 기본 버전을 대상으로합니다.


선택한 작업 대기열의 대상을 정의한 다음 파이프 라인을 해당 대기열로 라우팅 할 수도 있습니다. 이 방법은 모든 버전의 호출 코드에 라우팅이 적용된다는 제한이 있지만 코드베이스가 아닌 yaml 파일에 라우팅 세부 정보를 유지하는 것이 좋습니다.

관련 문제