无法在 GAE 中启动

Unable to launch in GAE

我正在尝试使用 codebase 来测试 Google 云 SQL 实例与 GAE 应用程序的连接。我能够 运行 在本地成功地部署它,但它似乎也在 AppEngine 中成功部署,但是当我尝试访问 myproject.appspot.com 时,我得到了 404。

以下是我遵循的步骤(跳过成功的本地相关步骤)。

  1. 创建了一个项目myproject
  2. 创建了一个 Google 云 SQL 第二代实例,myproject-db
  3. 创建了一个 root 用户并设置了密码。
  4. 使用 Google Cloud Console "jdbc:google:mysql://myproject:us-central1:myproject-db/demo?user=root&password=PASSWORD;"
  5. 中指示的连接字符串
  6. appengine-web.xml 如下所示

    <?xml version="1.0" encoding="utf-8"?>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>myproject</application>
    <version>1</version>
    <threadsafe>true</threadsafe>
    <use-google-connector-j>true</use-google-connector-j>
    
    <system-properties>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    <property name="cloudsql.url" value="jdbc:google:mysql://myproject:us-central1:myproject-db/demo?user=root&amp;password=PASSWORD;"/>
    <property name="cloudsql.url.dev" value="jdbc:mysql://localhost/demo?user=root&amp;useSSL=false"/>
    </system-properties>
    </appengine-web-app>
    
  7. HibernateJPAServlet中嵌入了以下代码片段

    if (System.getProperty("com.google.appengine.runtime.version")
                .startsWith("Google App Engine/")) {
            Class.forName("com.mysql.jdbc.GoogleDriver");
            properties.put("javax.persistence.jdbc.driver",
              "com.mysql.jdbc.GoogleDriver");
            properties.put("javax.persistence.jdbc.url",
              System.getProperty("cloudsql.url"));
        }
    
  8. 我已经将代码从本地上传到默认的 myproject 存储库

    https://source.developers.google.com/p/myproject/r/default

  9. 我从 "Development" 视图启动了 Google 云平台控制台。

  10. 成功 运行 mvn clean packagemvn appengine:update。由于 firewall/proxy 限制,我无法从本地执行 appengine:update
  11. 所以,在这一点上,我的理解是,我正在 运行 为 相同的 项目安装 GAE 应用程序和 GAE Cloud SQL 实例。所以 http://myproject.appspot.com/ 应该托管我在第 8 步上传的应用程序。但是当我访问它时显示 "404" - "The requested URL / was not found on this server."

万一问题是我们无法从 Cloud Console 部署它,那么我还有什么其他选择?我绝对不能改变 network/proxy 规则。

编辑

我尝试从 proxy/firewall 限制之外 运行 使用 mvn gcloud:runmvn gcloud:deploy 部署应用程序。最后明确写着"Deployed URL: [https://myproject.appspot.com]"。但是当我通过浏览器访问相同的 Url 时,同样的问题仍然存在。

编辑 2

我能够从 App Engine 仪表板看到错误跟踪。它在说

" org.hibernate.exception.JDBCConnectionException: Could not open connection
Caused by: org.hibernate.exception.JDBCConnectionException: Could not open connection
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost."

我的连接字符串是"jdbc:google:mysql://myproject:us-central1:myproject-db/demo?user=root&password=PASSWD123&"

这是我的错误(还有部分文档差距,我也提供了反馈)。每次我们通过 appenginegcloud 部署应用程序时,新部署的版本应该可以通过 "App Engine > Versions" 选项卡看到。我们应该 "Split Traffic" 并给新部署的版本 "100%"(用于测试),然后启动“https://myproject.appspot.com”以查看我们想要看到的结果。