在 Apache 服务器中运行的 Google Sheet 和 Django 身份验证失败

Failed authentication for Google Sheet and Django running in Apache server

提问人:André Mouro 提问时间:11/16/2023 更新时间:11/17/2023 访问量:23

问:

我正在实现一个 Django 应用程序,它使用 Google Sheet 作为数据库,并使用 Apache 托管在 Rocky Linux 服务器中。

为了测试 Django 和 Google Sheet 之间的集成,我遵循了 Tom Dekan 教程。为了将 Django 应用程序配置为与 Apache 一起运行,我遵循了官方的 Django 教程

但是,当我尝试访问该页面时,我收到内部服务器错误。检查错误日志时,我收到以下消息:

[星期四 11 月 16 日 11:44:34.203173 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] mod_wsgi (pid=150297): 无法执行 Python 脚本文件“/opt/dashbea/TesteGSheet/core/core/wsgi.py”。

[星期四 11 月 16 日 11:44:34.203297 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] mod_wsgi (pid=150297):处理 WSGI 脚本“/opt/dashbea/TesteGSheet/core/core/wsgi.py”时发生异常。

[星期四 11 月 16 日 11:44:34.203791 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]回溯(最近一次调用最后一次):

[星期四 11 月 16 日 11:44:34.203866 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件 “/opt/dashbea/TesteGSheet/core/core/wsgi.py”,第 22 行,在 <module 中>

[星期四 11 月 16 日 11:44:34.203876 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] 应用程序 = get_wsgi_application()

[星期四 11月 16 11:44:34.203885 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/django/core/wsgi.py”,第 12 行,get_wsgi_application

[星期四 11 月 16 日 11:44:34.203893 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] django.setup(set_prefix=False)

[星期四 11 月 16 日 11:44:34.203902 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/django/_init_.py”,第 19 行,在安装程序中

[星期四 11月 16 11:44:34.203910 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] configure_logging(设置。LOGGING_CONFIG,设置。日志记录)

[星期四 11 月 16 日 11:44:34.203919 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件 “/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/django/conf/_init_.py”,第 102 行,在 _getattr_

[星期四 11 月 16 日 11:44:34.203927 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] self._setup(名称)

[星期四 11 月 16 日 11:44:34.203935 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/django/conf/_init_.py”,第 89 行,_setup

[星期四 11月 16 11:44:34.203943 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] self._wrapped = 设置 (settings_module)

[星期四 11 月 16 日 11:44:34.203979 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件 “/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/django/conf/_init_.py”,第 217 行,在 _init_

[星期四 11 月 16 日 11:44:34.203987 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] mod = importlib.import_module(self.SETTINGS_MODULE)

[星期四 11 月 16 日 11:44:34.203996 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/usr/lib64/python3.9/importlib/_init_.py”,第 127 行,import_module

[星期四 11 月 16 日 11:44:34.204003 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] 返回 _bootstrap._gcd_import(name[level:], package, level)

[星期四 11 月 16 日 11:44:34.204012 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“<frozen importlib._bootstrap>”,第 1030 行,在 _gcd_import 中

[星期四 11 月 16 日 11:44:34.204021 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“<frozen importlib._bootstrap>”,第 1007 行,_find_and_load

[星期四 11 月 16 日 11:44:34.204030 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“<frozen importlib._bootstrap>”,第 986 行,_find_and_load_unlocked

[星期四 11 月 16 日 11:44:34.204039 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“<frozen importlib._bootstrap>”,第 680 行,在 _load_unlocked 中

[星期四 11 月 16 日 11:44:34.204047 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“<frozen importlib._bootstrap_external>”,第 850 行,exec_module

[星期四 11 月 16 日 11:44:34.204060 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“<frozen importlib._bootstrap>”,第 228 行,_call_with_frames_removed

[星期四 11 月 16 日 11:44:34.204075 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/core/core/settings.py”,第 133 行,在 <module>

[星期四 11 月 16 日 11:44:34.204085 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]GSPREAD_CLIENT = initialize_gspread() # 当我们的服务器启动时启动 gspread 客户端可以加快速度;它避免了对每个请求的重新身份验证

[星期四 11 月 16 日 11:44:34.204099 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/core/sim/services.py”,第 10 行,initialize_gspread

[星期四 11 月 16 日 11:44:34.204107 2023][wsgi:错误][PID 150297:TID 150433][remote 143.106.120.120:51686] return gspread.service_account_from_dict(get_credentials()) # 注意:我们可以将其移动到设置中来执行此操作一次。

[星期四 11 月 16 日 11:44:34.204116 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/gspread/auth.py”,第 364 行,service_account_from_dict

[星期四 11 月 16 日 11:44:34.204124 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] CREDS = ServiceAccountCredentials.from_service_account_info(

[星期四 11 月 16 日 11:44:34.204133 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/google/oauth2/service_account.py”,第 243 行,from_service_account_info

[星期四 11 月 16 日 11:44:34.204141 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] 签名者 = _service_account_info.from_dict(

[星期四 11 月 16 日 11:44:34.204149 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/google/auth/_service_account_info.py”,第 57 行,from_dict

[星期四 11 月 16 日 11:44:34.204157 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] 签名者 = crypt。RSASigner.from_service_account_info(数据)

[星期四 11 月 16 日 11:44:34.204166 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/google/auth/crypt/base.py”,第 109 行,from_service_account_info

[星期四 11 月 16 日 11:44:34.204173 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] 返回cls.from_string(

[星期四 11 月 16 日 11:44:34.204187 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/google/auth/crypt/_python_rsa.py”,第 155 行,from_string

[星期四 11 月 16 日 11:44:34.204195 2023][wsgi:错误][PID 150297:TID 150433][remote 143.106.120.120:51686] key = _helpers.from_bytes(key) # PEM 在 Python 3 中需要 str

[星期四 11 月 16 日 11:44:34.204204 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686]文件“/opt/dashbea/TesteGSheet/my_env/lib64/python3.9/site-packages/google/auth/_helpers.py”,第 151 行,from_bytes

[星期四 11 月 16 日 11:44:34.204211 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] 引发异常。无效值 (

[星期四 11 月 16 日 11:44:34.204230 2023][wsgi:错误][PID 150297:TID 150433][远程 143.106.120.120:51686] google.auth.exceptions.InvalidValue:无法将 None 转换为 unicode

分析错误消息,似乎我遇到了身份验证错误。最后一条消息似乎表明我没有发送任何身份验证值,或者我没有收到响应。这是正确的吗?[Thu Nov 16 11:44:34.204230 2023] [wsgi:error] [pid 150297:tid 150433] [remote 143.106.120.120:51686] google.auth.exceptions.InvalidValue: None could not be converted to unicode

使用 wsgi 运行 GSheets 和 Django 之间的集成是否有任何已知问题?

===========================================================================

这是我项目的树状结构

.
├── core
│   ├── asgi.py
│   ├── .env
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.pyc
│   │   ├── settings.cpython-39.pyc
│   │   ├── urls.cpython-39.pyc
│   │   └── wsgi.cpython-39.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
└── sim
    ├── admin.py
    ├── apps.py
    ├── __init__.py
    ├── migrations
    │   ├── __init__.py
    │   └── __pycache__
    │       └── __init__.cpython-39.pyc
    ├── models.py
    ├── __pycache__
    │   ├── admin.cpython-39.pyc
    │   ├── apps.cpython-39.pyc
    │   ├── __init__.cpython-39.pyc
    │   ├── models.cpython-39.pyc
    │   ├── services.cpython-39.pyc
    │   ├── urls.cpython-39.pyc
    │   └── views.cpython-39.pyc
    ├── services.py
    ├── templates
    │   └── photo_wall.html
    ├── tests.py
    ├── urls.py
    └── views.py

wsgi.py

import os
import sys

from django.core.wsgi import get_wsgi_application

path = "/opt/dashbea/TesteGSheet/core"
if path not in sys.path:
    sys.path.append(path)


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')

application = get_wsgi_application()

.conf 文件

<VirtualHost *:80>
ServerAdmin [CENSORED]
DocumentRoot /var/www/html
ServerName [CENSORED]
ServerAlias [CENSORED]

RewriteEngine On
RewriteCond %{HTTP_HOST} [CENSORED] [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ [CENSORED] [R,L]

<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>

</VirtualHost>

<VirtualHost *:443>
ServerAdmin [CENSORED]
DocumentRoot /var/www/html
#ServerName [CENSORED]
ServerName [CENSORED]
#ServerAlias [CENSORED]
#ServerAlias [CENSORED]

RewriteEngine On
RewriteCond %{HTTP_HOST} [CENSORED] [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ [CENSORED] [R,L]

#Alias /dashboardteste/ /[CENSORED]
#Alias /static/ [CENSORED]
#Alias /images  "/var/www/html/static/"

#<Directory [CENSORED]
#    Require all granted
#</Directory>

# Executar o Django como usuario apache
SuexecUserGroup [CENSORED] [CENSORED]
#Header set X-Frame-Options SAMEORIGIN

        <Directory [CENSORED]>
                <Files wsgi.py>
                        Order deny,allow
                        Allow from all
                        Require all granted
                </Files>
        </Directory>

# Certificados TLS/SSL
SSLEngine on
SSLCertificateFile [CENSORED]
SSLCertificateKeyFile [CENSORED]
#SSLCertificateChainFile [CENSORED]

WSGIScriptAlias /dashbea [CENSORED]/core/wsgi.py
WSGIDaemonProcess core python-home=[CENSORED]/my_env python-path=[CENSORED]/TesteGSheet
WSGIProcessGroup core

WSGIApplicationGroup %{GLOBAL}
</VirtualHost>

我已经在本地机器上成功实现了 Tom Dekan 教程,但未能在服务器中实现它。

django apache google-sheets wsgi

评论


答: 暂无答案