【问题标题】:Django Google App Engine Server Error 500Django Google App Engine 服务器错误 500
【发布时间】:2020-02-20 11:35:48
【问题描述】:

我已将我的 Django 应用部署到 Google Cloud。当我在本地和this post 中概述的步骤中托管它时,它运行良好。

当我尝试查看实时链接时,它会引发服务器错误 (500)。

当我在 settings.py 中启用调试时,这是完整的回溯。 (扭矩是我项目的名称),陈列室是我的应用程序。

回溯指的是一个视图属性(num_manufactureres),我在本地托管它时从未遇到过问题。

OperationalError at /showroom/
(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Request Method: GET
Request URL:    https://torque-256805.appspot.com/showroom/
Django Version: 2.2.5
Exception Type: OperationalError
Exception Value:    
(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Exception Location: /env/lib/python3.7/site-packages/MySQLdb/connections.py in __init__, line 166
Python Executable:  /env/bin/python3.7
Python Version: 3.7.4
Python Path:    
['/srv',
 '/env/bin',
 '/opt/python3.7/lib/python37.zip',
 '/opt/python3.7/lib/python3.7',
 '/opt/python3.7/lib/python3.7/lib-dynload',
 '/env/lib/python3.7/site-packages']
Server time:    Thu, 24 Oct 2019 09:45:29 +0300
...

/env/lib/python3.7/site-packages/MySQLdb/__init__.py in Connect
    return Connection(*args, **kwargs) …
▶ Local vars
/env/lib/python3.7/site-packages/MySQLdb/connections.py in __init__
        super(Connection, self).__init__(*args, **kwargs2) …
▶ Local vars
...

    num_manufacturers = Manufacturer.objects.all().count() …
▶ Local vars

我是 Google Cloud 的新手,所以我不知道如何开始调试它。

以下是一些可能的问题:

  1. 我在 cloud.google.com 上创建的服务器实例使用 europe-west3 作为区域。但是当我在部署时,我认为它创建了一个全新的服务器并选择了 europe-west6 作为更好的选择。 (近距离,更好的可靠性等......)

  2. 我根据check --deploy Django 命令更改了我的项目settings.py 以获得更好的安全性。

否则,我想不出别的了。有人可以帮忙吗?

【问题讨论】:

  • 嗨@Rene,你看到这个Django example from App Engine了吗?它将向您解释如何将您的 Django 应用程序和 SQL 数据库部署到 App Engine。如果您查看 settings.py 文件,这是您在生产环境中运行 App Engine 时可能需要用于 HOST 参数 /cloudsql/<your-cloudsql-connection string> 的 unix 套接字。最后但同样重要的是,确保你有ALLOWED_HOSTS=['localhost'] if HOST='localhost',否则你可以使用'HOST': '127.0.0.1',如上例所示。如果这对您有帮助,请告诉我。
  • @sllopis 你不会相信我所做的。我在开发过程中将数据库写入settings.py,但在部署之前,我用早期的“香草”设置文件覆盖(而不是替换!)这个文件。我无法解决它,因为这是一个愚蠢的错误。
  • 请创建一个答案,以便我关闭这个问题。
  • 我为这个问题发布了一个相当通用的答案。 @Rene

标签: mysql django google-app-engine google-cloud-platform mariadb


【解决方案1】:

查看这个 Django example on App Engine settings.py 文件:

if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
        }
    }

最后但并非最不重要的一点是,如果您在本地运行您的应用程序,如果您的数据库主机是HOST='localhost',请确保您有ALLOWED_HOSTS= ['localhost'],否则您可以只使用'HOST': '127.0.0.1',如上面的代码示例所示.

【讨论】:

  • 感谢您的简单回答。一个愚蠢的错误会导致如此多的心痛。
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多