代码之家  ›  专栏  ›  技术社区  ›  oziomajnr

谷歌应用引擎应用程序突然停止工作,返回503

  •  3
  • oziomajnr  · 技术社区  · 6 年前

    <HTML>
      <HEAD>
        <TITLE>Service Unavailable</TITLE>
      </HEAD>
     <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
    <H1>Service Unavailable</H1>
     <H2>Error 503</H2>
      </BODY>
     </HTML>
    

    我认为这是因为我还没有迁移到不推荐使用的云端点v1.1到V2.0

    但是在我做了迁移所需的更改之后,当我尝试部署它时,它仍然返回503,同时运行Maven命令来部署或生成文档。

    我知道谷歌说他们正在经历 issues

    我的应用程序引擎应用程序正在使用美国中部地区。

    更新 :看起来cloud endpoint V1.1已关闭,无法再提供流量服务,因此根据迁移指南,我已能够迁移到版本2.0,但不幸的是,我在api发现文档中遇到错误

    这就是错误

    API发现响应缺少必需字段。

    我正试着绕开这件事

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0        http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    
    <groupId>group-id</groupId>
    <artifactId>artifact-id</artifactId>
    
    <properties>
        <app.id>project-id</app.id>
        <app.version>1</app.version>
        <appengine.version>1.9.64</appengine.version>
        <gcloud.plugin.version>2.0.9.121.v20160815</gcloud.plugin.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <jackson.version>2.9.0</jackson.version>
        <archiveClasses>true</archiveClasses>
    </properties>
    
    <prerequisites>
        <maven>3.3.9</maven>
    </prerequisites>
    
    <dependencies>
        <!-- Compile/runtime dependencies -->
        <dependency>
            <groupId>com.google.endpoints</groupId>
            <artifactId>endpoints-framework</artifactId>
            <version>2.1.0</version>
        </dependency>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
    
        <!--  Objectify library ready -->
        <dependency>
            <groupId>com.googlecode.objectify</groupId>
            <artifactId>objectify</artifactId>
            <version>6.0</version>
        </dependency>
    
        <!--  Apache Commons Library -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.0</version>
        </dependency>
    
        <!-- Add support for joda money library  -->
        <dependency>
            <groupId>org.joda</groupId>
            <artifactId>joda-money</artifactId>
            <version>0.10.0</version>
        </dependency>
    
        <!--Added support for joda time library -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.4</version>
        </dependency>
        <!-- end joda time api.-->
    
        <!-- Load scrypt library for password encryption and decryption -->
        <dependency>
            <groupId>com.lambdaworks</groupId>
            <artifactId>scrypt</artifactId>
            <version>1.4.0</version>
        </dependency>
        <!-- Objectify utils to help us with currency -->
        <dependency>
            <groupId>com.sappenin.objectify</groupId>
            <artifactId>objectify-utils</artifactId>
            <version>5.1.3</version>
        </dependency>
        <!-- google guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
        <!-- Apache poi for excel file processing -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.15</version>
        </dependency>
    
    
        <!-- jackson-dataformat-csv-->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-csv</artifactId>
            <version>2.7.0</version>
        </dependency>
    
        <!-- jackson data bind library for json -->
        <!-- Google cloud storage ends -->
        <!-- google cloud storage client -->
        <dependency>
            <groupId>com.google.appengine.tools</groupId>
            <artifactId>appengine-gcs-client</artifactId>
            <version>0.7</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.api-client</groupId>
                    <artifactId>google-api-client-appengine</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.google.http-client</groupId>
                    <artifactId>google-http-client-jackson2</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.google.http-client</groupId>
                    <artifactId>google-http-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-storage</artifactId>
            <version>0.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.api-client</groupId>
            <artifactId>google-api-client-appengine</artifactId>
            <version>1.23.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.http-client</groupId>
            <artifactId>google-http-client-jackson2</artifactId>
            <version>1.23.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.http-client</groupId>
            <artifactId>google-http-client</artifactId>
            <version>1.23.0</version>
        </dependency>
        <!-- Test Dependencies -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>2.0.2-beta</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-stubs</artifactId>
            <version>${appengine.version}</version>
            <scope>test</scope>
        </dependency>
    
        <!-- Mail Dependencies with MailGun -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.19.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.19.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-multipart</artifactId>
            <version>1.19.1</version>
        </dependency>
        <!-- End Mail Dependencies with MailGun -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker-gae</artifactId>
            <version>2.3.25-incubating</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    
        <dependency>
            <!-- Note: core-annotations version x.y.0 is generally compatible with
                 (identical to) version x.y.1, x.y.2, etc. -->
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    
    </dependencies>
    
    <build>
        <!-- for hot reload of the web application-->
        <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>display-dependency-updates</goal>
                            <goal>display-plugin-updates</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>        
                <plugin>
                    <groupId>com.google.cloud.tools</groupId>
                    <artifactId>appengine-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <configuration>
                        <stage.enableJarClasses>true</stage.enableJarClasses>
                        <cloudSdkPath>/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk</cloudSdkPath>
                    </configuration>
                </plugin>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <!-- deploy configuration -->
                </configuration>
    
            </plugin>
    
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>endpoints-framework-maven-plugin</artifactId>
                <version>1.0.2</version>
                <configuration>
                    <!-- plugin configuration -->
                    <hostname>project-id.appspot.com</hostname>
    
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>discoveryDocs</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

     <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <!-- Endpoints web.xml -->
        <!-- [START web] -->
        <servlet>
            <display-name>Remote API Servlet</display-name>
            <servlet-name>RemoteApiServlet</servlet-name>
            <servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>Grader</servlet-name>
            <servlet-class>com.softquest.apollo.servlets.Grader</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>SheetHandler</servlet-name>
            <servlet-class>com.softquest.apollo.servlets.SheetHandler</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>RemoteApiServlet</servlet-name>
            <url-pattern>/remote_api</url-pattern>
        </servlet-mapping>
        <!-- Score Sheet Servlet -->
        <!-- Remote Api Servlet -->
        <servlet>
            <servlet-name>EndpointsServlet</servlet-name>
            <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
            <init-param>
                <param-name>services</param-name>
                <param-value>com.softquest.apollo.services.UserServices</param-value>
            </init-param>
        </servlet>
        <!-- Payment Response Servlet -->
        <servlet>
            <servlet-name>PaymentResponseServlet</servlet-name>
            <servlet-class>com.softquest.apollo.servlets.PaymentResponseServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>PaymentResponseServlet</servlet-name>
            <url-pattern>/PaymentResponse</url-pattern>
        </servlet-mapping>
        <!-- Payment Response Servlet-->
        <servlet-mapping>
            <servlet-name>EndpointsServlet</servlet-name>
            <url-pattern>/_ah/api/*</url-pattern>
        </servlet-mapping>
        <!-- Objectify filter registration -->
        <filter>
            <filter-name>ObjectifyFilter</filter-name>
            <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>ObjectifyFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- Setup ServletContextListener to start up objectify entities on application -->
        <servlet>
            <servlet-name>BackEndStarter</servlet-name>
            <servlet-class>com.softquest.apollo.BackEndStarter</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>BackEndStarter</servlet-name>
            <url-pattern>/backend/starter</url-pattern>
        </servlet-mapping>
        <!-- Migration servlet -->
        <servlet>
            <servlet-name>MigrationServlet</servlet-name>
            <servlet-class>com.softquest.apollo.servlets.MigrationServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>MigrationServlet</servlet-name>
            <url-pattern>/migration/*</url-pattern>
        </servlet-mapping>
        <!-- Migration Servlet-->
        <!-- Migration Handler Servlet -->
        <servlet>
            <servlet-name>MigrationHandler</servlet-name>
            <servlet-class>com.softquest.apollo.servlets.MigrationHandler</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>MigrationHandler</servlet-name>
            <url-pattern>/migration-handler/*</url-pattern>
        </servlet-mapping>
        <!-- End of Migration handler Servlet-->
        <!-- Setup web.xml to start up context listener -->
        <servlet-mapping>
            <servlet-name>Grader</servlet-name>
            <url-pattern>/Grader</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>SheetHandler</servlet-name>
            <url-pattern>/SheetHandler</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
        </welcome-file-list>
    </web-app>
    

    com.google.api.服务器.spi.EndpointsServlet文件

    if (!dispatcher.dispatch(method, path, context)) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            response.getWriter().append("Not Found");
          }
    

    我猜这个错误被发布到一些第三方库中,可能仍然使用任何旧的云端点maven依赖项或插件。所以我会从我的pom.xml文件并尝试部署。

    3 回复  |  直到 6 年前
        1
  •  3
  •   WillCalderbank    6 年前

    我在一个端点上遇到了同样的问题,这个端点已经有几个月没有更改了,日志中也没有出现任何内容。我想这可能是应用程序引擎的问题。


    编辑

    https://cloud.google.com/endpoints/docs/frameworks/python/migrating .

    文件上说v1.1将于8月2日关闭,我想他们已经有时间了

        2
  •  0
  •   Yassir    6 年前

    我已经成功地迁移到端点V2后,一系列的命中和试验方法。

    在androidstudio上开发的appengine项目具有以下结构-

    项目

    • 应用程序
    • 后端
    • 构建.gradle

    让我们一个一个地改变。


    /应用程序/构建.gradle

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:26.+'
    
    // Remove this line
    //compile project(path: ':micirclews', configuration: 'android-endpoints')
    

    }

    apply plugin: 'com.google.cloud.tools.endpoints-framework-client'
    

    /后端/构建.gradle (在backend/appengine模块中进行更改)

    buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        //Remove this
        //classpath 'com.google.appengine:gradle-appengine-plugin:1.9.59'
    
        //Add these two lines
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.3'
    }
    

    }

    删除此- apply plugin: 'appengine'

    apply plugin: 'com.google.cloud.tools.appengine'
    apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    
    
    dependencies {
    //Remove these 3 lines-
    //appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.59'
    //compile 'com.google.appengine:appengine-endpoints:1.9.59'
    //compile 'com.google.appengine:appengine-endpoints-deps:1.9.59'
    
    //Add these 2 lines-
    compile 'com.google.endpoints:endpoints-framework:2.0.9'
    compile 'javax.inject:javax.inject:1'
    .....
    

    }

    // delete this whole block, it's configuration for the older plugin
    // appengine {
    //   downloadSdk = true
    //   appcfg {
    //     oauth2 = true
    //   }
    //   endpoints {
    //     getClientLibsOnBuild = true
    //     getDiscoveryDocsOnBuild = true
    //   }
    // }
    

    /构建.gradle (在根目录中进行更改)构建.gradle)

    buildscript {
    repositories {
        jcenter()
    }
    
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    
        //Add these 2 lines
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.3'
    }
    


    在仔细地进行所有更改之后,请清理项目,重新生成并运行它。最后在一切正常时部署它。

    你可以在这里介绍整个过程- https://github.com/GoogleCloudPlatform/endpoints-framework-gradle-plugin/blob/master/ANDROID_README.md

        3
  •  0
  •   oziomajnr    5 年前

    正如saiyr在评论中所说的,googlecloudendpointsv1.1已经被完全弃用,并且已经停止服务于流量,这就是我所犯错误的原因。 我通过迁移到cloudendpoints v2解决了这个问题,这个过程非常简单,只需遵循 migration docs 但这里有一些关于迁移的问题,以及我是如何解决的。

    1. 如果您有多个服务类,则必须将它们添加到网站.xml在声明 com.google.api.server.spi.EndpointsServlet Servlet。 com.google.api.server.spi.SystemServiceServlet Servlet,我认为它与Objectify过滤器有关。 See the Docs for more info

    2. 由于googleappenginejava7运行时也不受欢迎,我决定迁移到java8,但不幸的是,我用来抽象连接到数据存储(Objectify)的过程的库似乎不能与java8运行时一起工作,我稍后会对此进行研究,但恢复到java7运行时对我来说是可行的,应用程序也会备份还有跑步。

    更新 :迁移到Java 8运行时时遇到的问题与Objectify无关,我用于加密密码的库(BCrypt)就是问题所在,它只是在Google App Engine Java 8运行时不起作用,我不得不在spring security中切换到加密库。