无法在 GAE 中启动
Unable to launch in GAE
我正在尝试使用 codebase 来测试 Google 云 SQL 实例与 GAE 应用程序的连接。我能够 运行 在本地成功地部署它,但它似乎也在 AppEngine 中成功部署,但是当我尝试访问 myproject.appspot.com 时,我得到了 404。
以下是我遵循的步骤(跳过成功的本地相关步骤)。
- 创建了一个项目
myproject
- 创建了一个 Google 云 SQL 第二代实例,
myproject-db
- 创建了一个
root
用户并设置了密码。
- 使用 Google Cloud Console
"jdbc:google:mysql://myproject:us-central1:myproject-db/demo?user=root&password=PASSWORD;"
中指示的连接字符串
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&password=PASSWORD;"/>
<property name="cloudsql.url.dev" value="jdbc:mysql://localhost/demo?user=root&useSSL=false"/>
</system-properties>
</appengine-web-app>
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"));
}
我已经将代码从本地上传到默认的 myproject 存储库
我从 "Development" 视图启动了 Google 云平台控制台。
- 成功 运行
mvn clean package
和 mvn appengine:update
。由于 firewall/proxy 限制,我无法从本地执行 appengine:update
。
- 所以,在这一点上,我的理解是,我正在 运行 为 相同的 项目安装 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:run
和 mvn 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&"
这是我的错误(还有部分文档差距,我也提供了反馈)。每次我们通过 appengine
或 gcloud
部署应用程序时,新部署的版本应该可以通过 "App Engine > Versions"
选项卡看到。我们应该 "Split Traffic"
并给新部署的版本 "100%"
(用于测试),然后启动“https://myproject.appspot.com”以查看我们想要看到的结果。
我正在尝试使用 codebase 来测试 Google 云 SQL 实例与 GAE 应用程序的连接。我能够 运行 在本地成功地部署它,但它似乎也在 AppEngine 中成功部署,但是当我尝试访问 myproject.appspot.com 时,我得到了 404。
以下是我遵循的步骤(跳过成功的本地相关步骤)。
- 创建了一个项目
myproject
- 创建了一个 Google 云 SQL 第二代实例,
myproject-db
- 创建了一个
root
用户并设置了密码。 - 使用 Google Cloud Console
"jdbc:google:mysql://myproject:us-central1:myproject-db/demo?user=root&password=PASSWORD;"
中指示的连接字符串
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&password=PASSWORD;"/> <property name="cloudsql.url.dev" value="jdbc:mysql://localhost/demo?user=root&useSSL=false"/> </system-properties> </appengine-web-app>
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")); }
我已经将代码从本地上传到默认的 myproject 存储库
我从 "Development" 视图启动了 Google 云平台控制台。
- 成功 运行
mvn clean package
和mvn appengine:update
。由于 firewall/proxy 限制,我无法从本地执行appengine:update
。 - 所以,在这一点上,我的理解是,我正在 运行 为 相同的 项目安装 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:run
和 mvn 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&"
这是我的错误(还有部分文档差距,我也提供了反馈)。每次我们通过 appengine
或 gcloud
部署应用程序时,新部署的版本应该可以通过 "App Engine > Versions"
选项卡看到。我们应该 "Split Traffic"
并给新部署的版本 "100%"
(用于测试),然后启动“https://myproject.appspot.com”以查看我们想要看到的结果。