2017-10-11 14 views
0

GAE 표준 환경에서 여러 PHP 응용 프로그램을 배포했습니다. 정상적으로 작동합니다.로컬 SDK 서버에서 작업하면서 라이브 Google App Engine에서 404 번

이제 gcloud SDK가 제공하는 로컬 서버에서 예상대로 작동하는 새 응용 프로그램 (터미널 명령 : dev_appserver.py --log_level=warning app.yaml)을 배포하고 있습니다.

The page could not be found 

No web page found for the web address: xxx 
HTTP ERROR 404 

애플리케이션 제목은 다음과 같습니다 :

runtime: php55 
api_version: 1 
threadsafe: true 

skip_files: 
- README.md 
- package.json 

handlers: 

- url: /(.*\.html) 
    script: mod_rewrite.php 
    secure: always 

- url: /(.*\..{2,}) 
    static_files: \1 
    upload: (.*\..{2,}) 
    secure: always 

- url: /.* 
    script: mod_rewrite.php 
    secure: always 

문제는 내가 라이브 GAE 서비스 (gcloud app deploy app.yaml --project myapp)에 배포 할 때, 나는 404 오류 메시지가 있다는 것입니다 또한 I'va는 특정 파일을 가리키는 테스트 핸들러를 추가하려고 시도했습니다.

- url: /(mytest\.html) 
    static_files: \1 
    upload: mytest.html 
    secure: always 

이렇게하면 URL에 연결할 수 있습니다. 그러나 그 것이었다. 다른 URL은 404.

재미있는 점은 재미있는 것은 현재 배포 된 버전의 GAE 앱의 Versions 탭에 이전 버전이 없더라도 앱이 0 B이라고 나와 있습니다. 약 30Mb. 배포 할 때 느린 인터넷 연결로 인해 988 개의 파일이 모두 업로드 된 것으로 보입니다.

자습서를 성공적으로 완료 한 후 모든 것을 새로운 프로젝트에 다시 배포하려고 시도했지만 여전히 동일한 문제가 발생합니다.

답변

0

application_readable 처리기 옵션을 사용하면 앱 코드에 각 정적 파일을 포함 할 수 있습니다. Handlers element에서 :

application_readable

선택 사항. Boolean. 기본적으로 정적 파일 처리기 에 선언 된 파일은 정적 데이터로 업로드되며 최종 사용자에게만 제공됩니다. 그들은 을 응용 프로그램에서 읽을 수 없습니다. 이 필드를 true로 설정하면 파일도 코드 데이터로 업로드되므로 응용 프로그램에서 을 읽을 수 있습니다. 두 업로드 모두 코드와 정적 데이터 resource quotas에 대해 부과됩니다. 이처럼

:

- url: /(.*\..{2,}) 
    static_files: \1 
    upload: (.*\..{2,}) 
    application_readable: true 
    secure: always 
0

몇 시간 동안 테스트를 마친 후에 마침내 문제가 무엇인지 깨달았습니다.

GAE에서 특정 경로를 정적으로 선언 할 때 코드가 아닌 경로로 해석됩니다. 따라서 해당 경로 내의 모든 파일은 require 또는 include과 함께 PHP 환경에서 실행되는 스크립트로 액세스 할 수 없으며 배치 된 코드 디버거에 표시되지 않습니다.

그래서 모든 정적 파일을 하위 폴더 (www)에두고 정적 파일이 아닌 파일을 다른 하위 폴더 아래 PHP 스크립트 required에 배치했습니다.