无法启动 Google Cloud phpMyAdmin 页面?

Posted

技术标签:

【中文标题】无法启动 Google Cloud phpMyAdmin 页面?【英文标题】:Can't start up Google Cloud phpMyAdmin page? 【发布时间】:2016-12-26 08:25:51 【问题描述】:

我正在尝试使用以下链接为 Google Cloud 设置 phpMyAdmin 页面,我在此网站上 100% 关注该链接:https://cloud.google.com/sql/docs/phpmyadmin-on-app-engine 当我尝试运行 php 服务器以查看它是否已启动并运行时,我会这样做以下:

C02Q202LG8WL:phpMyAdmin user$ appcfg.py update .
01:26 AM Application: database-140707; version: 2
01:26 AM Host: appengine.google.com
01:26 AM Starting update of app: database-140707, module: phpmyadmindb, version: 2
01:26 AM Getting current resource limits.
01:26 AM Scanning files on local disk.
01:26 AM Scanned 500 files.
01:26 AM Scanned 1000 files.
01:26 AM Scanned 1500 files.
01:26 AM Scanned 2000 files.
01:26 AM Cloning 1113 static files.
01:27 AM Rolling back the update.
Error 409: --- begin server output ---
No transaction is in progress.
--- end server output ---

我们不断收到这个No transaction is in progress. 错误。它使我无法加载 localhost/phpmyadmin 页面。任何想法为什么会发生这种情况?如果我尝试回滚事务的更改,我会这样做:

C02Q202LG8WL:phpMyAdmin user$ /usr/local/google_appengine/appcfg.py rollback database-140707/
01:30 AM Application: database-140707
01:30 AM Host: appengine.google.com
01:30 AM Rolling back the update.
C02Q202LG8WL:phpMyAdmin user$ appcfg.py update .
01:30 AM Application: database-140707; version: 2
01:30 AM Host: appengine.google.com
01:30 AM Starting update of app: database-140707, module: phpmyadmindb, version: 2
01:30 AM Getting current resource limits.
01:30 AM Scanning files on local disk.
01:30 AM Scanned 500 files.
01:30 AM Scanned 1000 files.
01:30 AM Scanned 1500 files.
01:30 AM Scanned 2000 files.
    Error 409: --- begin server output ---
There is an operation pending for this application: AppLock held for "Updating engine_version_id='2' within engine_id='default'." acquired by <Insert User> at 2016-08-19 08:26:05.734255 GMT.  Please wait and try again or use 'appcfg rollback' to attempt to cleanly abort the current operation.
--- end server output ---

我似乎无法弄清楚为什么我无法在 Google Cloud 上启动 phpMyAdmin,而且我不确定这些错误的原因或来源。任何帮助,将不胜感激。谢谢。

编辑:

我实际上得到了正确部署的一切。我所要做的就是将app.yaml 从模块phpmyadmindb 更改为default。这是我创建的app.yaml

application: database-140707
service: default
runtime: php55
api_version: 1
version: 3

handlers:

- url: /(.+\.(ico|jpg|png|gif))$
  static_files: \1
  upload: (.+\.(ico|jpg|png|gif))$
  application_readable: true

- url: /(.+\.(htm|html|css|js))$
  static_files: \1
  upload: (.+\.(htm|html|css|js))$
  application_readable: true

- url: /(.+\.php)$
  script: \1
  login: admin

- url: /.*
  script: index.php
  login: admin

config.inc.php:

<!-- [START all] -->
<?php
// [START_EXCLUDE silent]
/**
 * Copyright 2016 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// [END_EXCLUDE]
/*
 * This is needed for cookie based authentication to encrypt password in
 * cookie
 * http://www.question-defense.com/tools/phpmyadmin-blowfish-secret-generator
 */
$cfg['blowfish_secret'] = '<Blow Fish Generator>'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

/*
 * Servers configuration
 */
$i = 0;

// Change this to use the project and instance that you've created.
$host = '/cloudsql/<Cloud SQL Instance Name>';
$type = 'socket';

/*
* First server
*/
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['socket'] = $host;
$cfg['Servers'][$i]['connect_type'] = $type;
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
/*
 * End of servers configuration
 */
/*
* Other settings
*/
$cfg['PmaNoRelation_DisableWarning'] = true;
$cfg['ExecTimeLimit'] = 60;
$cfg['CheckConfigurationPermissions'] = false;
// [END all]

php.ini:

google_app_engine.enable_functions = "php_uname, getmypid"

这里是成功的输出:

C02Q202LG8WL:phpMyAdmin schan$ appcfg.py update .
01:12 PM Application: database-140707; version: 3
01:12 PM Host: appengine.google.com
01:12 PM Starting update of app: database-140707, version: 3
01:12 PM Getting current resource limits.
01:12 PM Scanning files on local disk.
01:12 PM Scanned 500 files.
01:13 PM Scanned 1000 files.
01:13 PM Scanned 1500 files.
01:13 PM Scanned 2000 files.
01:13 PM Cloning 1113 static files.
01:13 PM Cloning 2276 application files.
01:13 PM Cloned 2000 files.
01:13 PM Uploading 3 files and blobs.
01:13 PM Uploaded 3 files and blobs.
01:13 PM Compilation starting.
01:13 PM Compilation completed.
01:13 PM Starting deployment.
01:13 PM Checking if deployment succeeded.
01:13 PM Deployment successful.
01:13 PM Checking if updated app version is serving.
01:13 PM Completed update of app: database-140707, version: 3

我现在遇到的问题是教程说导航到https://phpmyadmindb-dot-database-140707.appspot.com/ 以查看phpmyadmin 是否设置正确。然而,当我在那里导航时,我得到的只是一个显示Hello World! 的屏幕,但似乎没有部署实际的 phpMyAdmin。我试图去https://phpmyadmindb-dot-database-140707.appspot.com/index.php 看看它是否被创建,但它不是。有人会碰巧知道为什么吗?

【问题讨论】:

【参考方案1】:

日志表明您的应用程序有多个服务/模块 - 我看到对 phpmyadmindb 一个的日志引用,还有任何应用程序的 default 模块。也许您只是在教程的Create app.yaml 部分错过了这一步:

    如果您将 phpMyAdmin 部署为 App Engine 中的第一个也是唯一一个应用程序,请将服务的值从 phpmyadmin 更改为 default.

通常,您会将 phpMyAdmin 部署为现有的服务 应用程序并提供服务的名称。但是,如果你 尚未部署应用程序,则需要使用 服务名称“默认”。就本教程而言,这很好 如果您只是在 App Engine 上试用 phpMyAdmin。

我个人会在该段落中将first and only application in App Engine 替换为first and only service of your application。总之……

对于多模块应用程序,您应该以典型/经常记录的方式使用 SDK 实用程序(dev_appserver.pyappcfg.py 等) - 通过指定应用程序的目录 (.在你的情况下)。换句话说,不要让这些实用程序自行决定对哪些服务进行操作(这可能会导致意外结果),而是习惯于通过相应服务/模块的 .yaml 文件列表来明确指定它们。

许多文档/教程在引入服务支持后没有更新,仍然建议在使用 SDK 实用程序时指定 应用程序(按 ID 或应用程序目录) - 这只是明确的在单模块应用程序中。明确指定服务/模块 - 通过它们各自的.yaml 文件 - 对于 单服务和多服务应用程序来说仍然是明确的,并且对人为错误的容忍度较低。顺便说一句,这是 dev_appserver.py 目前(SDK 1.9.40)的默认值,但仍然不是 appcfg.py 的默认值(使用 --help 运行它们以检查语法)。

回到您的案例细节...

更新和回滚错误都表明尝试是针对phpmyadmindb 模块的,但第二个错误表明为更新default 模块而持有锁。尝试显式回滚 default 模块的更新(如果确实错过了,则在执行引用的步骤之后),希望这将释放锁定并允许后续部署。

还要检查.yaml 文件中是否存在正确的服务/模块名称 - 很容易错过,尤其是在创建新服务和从现有模块复制粘贴文件时。此类情况以及对服务/模块名称的更改可能会导致 SDK 实用程序和/或应用程序/服务/模块部署的混淆,应谨慎进行。

【讨论】:

非常感谢您的彻底回复。我得到了要部署的服务器,但教程说导航到https://phpmyadmindb-dot-database-140707.appspot.com/ 以查看 phpmyadmin 是否设置正确。当我去那里时,我得到一个屏幕,上面写着Hello World!,但似乎没有部署 phpMyAdmin GUI。我包含了我的 app.yaml 并确保 config.inc.php 指向正确的 $host(我部署的 CloudSQL 实例)。任何帮助,将不胜感激。谢谢! 我在 php 是 NULL。但是由于您的模块在重命名后是默认模块,我希望根据通过 URL 路由(@987654323 @)。

以上是关于无法启动 Google Cloud phpMyAdmin 页面?的主要内容,如果未能解决你的问题,请参考以下文章

Colab / Google Cloud SDK - 本地运行时总是“忙” - 无法重新启动

部署到 Google Cloud Run 时 Docker 容器无法启动

通过 Google Cloud SDK 更新 App Engine 应用程序后无法启动它

无法在Google Cloud Dataproc上启动Apache Flink 1.7

Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”

Google Stackdriver Logging无法在Google Cloud Shell和GKE中使用