最新升级到 Ubuntu 16.04 后,pgAdmin4 停止工作。'Request' 对象没有属性 'is_json'

最新升级到 Ubuntu 16.04 后,pgAdmin4 停止工作。'Request' 对象没有属性 'is_json'

pgadmin4 在 ubuntu 16.04 系统更新之前运行完美,我实际上并没有检查这些更新是什么。

但在更新后,我尝试运行 pgAdmin,它启动并显示 pgAdmin 加载屏幕。然后它加载了很长时间,最终给了我错误:

无法联系应用程序服务器。

我检查了 pgAdmin4 日志并得到以下信息:

AttributeError: 'Request' object has no attribute 'is_json'
2020-05-18 16:08:46,684: ERROR  pgadmin:  'Request' object has no attribute 'is_json'
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1473, in full_dispatch_request
    rv = self.preprocess_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1666, in preprocess_request
    rv = func()
  File "/usr/lib/python3/dist-packages/flask_principal.py", line 477, in _on_before_request
    identity = loader()
  File "/usr/lib/python3/dist-packages/flask_security/core.py", line 515, in _identity_loader
    if not isinstance(current_user._get_current_object(), AnonymousUserMixin):
  File "/usr/lib/python3/dist-packages/werkzeug/local.py", line 307, in _get_current_object
    return self.__local()
  File "/usr/lib/python3/dist-packages/flask_login/utils.py", line 26, in <lambda>
    current_user = LocalProxy(lambda: _get_user())
  File "/usr/lib/python3/dist-packages/flask_login/utils.py", line 302, in _get_user
    current_app.login_manager._load_user()
  File "/usr/lib/python3/dist-packages/flask_login/login_manager.py", line 313, in _load_user
    return self._load_from_request(request)
  File "/usr/lib/python3/dist-packages/flask_login/login_manager.py", line 370, in _load_from_request
    user = self.request_callback(request)
  File "/usr/lib/python3/dist-packages/flask_security/core.py", line 475, in _request_loader
    if request.is_json:
  File "/usr/lib/python3/dist-packages/werkzeug/local.py", line 348, in __getattr__
    return getattr(self._get_current_object(), name)
AttributeError: 'Request' object has no attribute 'is_json'

我已经尝试搜索过它了,但我不是 Python 爱好者。我猜是 Python 版本不兼容。4 天前我看到过一个关于这个问题的问题。它被删除了。我不知道为什么。

注意:没有配置更改或任何内容。

编辑(感谢@Des Magner 评论):PostgreSQL 团队已经在跟踪此错误https://redmine.postgresql.org/issues/5565

答案1

遇到了同样的问题。

我的解决方案不是最好和最简单的,但它有效。

我使用 python 3.8 创建了新的虚拟环境并尝试运行 PgAdmin。当然,由于没有可用的 python 模块,它失败了。所以我安装模块并从终端运行 PgAdmin(例如“python3 /usr/share/pgadmin4/web/pgAdmin4.py”),然后一次又一次...

直到我遇到进口问题ImportError: cannot import name 'default_render_json' from 'flask_security.views'

解决方案就在这里,非常简单 https://forums.opensuse.org/showthread.php/539523-pgAdmin4-startet-nicht-mehr?s=75392d29ead60bd332ff6f2541467dba&p=2930160#post2930160

你还必须安装 libpq 来编译 psycopg2

总结一下我的步骤是:

  1. sudo apt 安装 libpq-dev
  2. 使用 python 3.8 激活虚拟环境
  3. pip 安装 -r pip_freeze_output_file.txt
  4. 修复 ImportError:无法导入名称“default_render_json”

pip freeze 输出为:

alembic==1.4.2
astroid==2.3.3
Babel==2.8.0
backcall==0.1.0
bcrypt==3.1.7
blinker==1.4
Brotli==1.0.7
cffi==1.14.0
click==7.1.2
cryptography==2.9.2
decorator==4.4.2
dnspython==1.16.0
email-validator==1.1.1
entrypoints==0.3
Flask==1.1.2
Flask-BabelEx==0.9.4
Flask-Compress==1.5.0
Flask-Gravatar==0.5.0
Flask-Login==0.5.0
Flask-Mail==0.9.1
Flask-Migrate==2.5.3
Flask-Paranoid==0.2.0
Flask-Principal==0.4.0
Flask-Security==3.0.0
Flask-SQLAlchemy==2.4.1
Flask-WTF==0.14.3
future==0.18.2
idna==2.9
ipython==7.13.0
ipython-genutils==0.2.0
isort==4.3.21
itsdangerous==1.1.0
jedi==0.16.0
Jinja2==2.11.2
lazy-object-proxy==1.4.3
ldap3==2.7
Mako==1.1.2
MarkupSafe==1.1.1
mccabe==0.6.1
paramiko==2.7.1
parso==0.6.2
passlib==1.7.2
pexpect==4.8.0
pickleshare==0.7.5
prompt-toolkit==3.0.5
psutil==5.7.0
psycopg2==2.8.5
ptyprocess==0.6.0
pyasn1==0.4.8
pycodestyle==2.5.0
pycparser==2.20
pyflakes==2.1.1
Pygments==2.6.1
pylint==2.4.4
PyNaCl==1.3.0
python-dateutil==2.8.1
python-editor==1.0.4
pytz==2020.1
simplejson==3.17.0
six==1.14.0
speaklater==1.3
SQLAlchemy==1.3.17
sqlparse==0.3.1
sshtunnel==0.1.5
traitlets==4.3.3
urllib3==1.25.8
wcwidth==0.1.9
Werkzeug==1.0.1
wrapt==1.11.2
WTForms==2.3.1

答案2

使用其安装最新的 pgAdmin4 版本(4.22)python-wheel安装程序(需要 python 3.4+)作为解决方法,同时修复此错误。

我用了米尼康达创建一个虚拟环境在 python 3.7 中。

一旦我创建并激活虚拟环境,我就会:

  1. 创建文件夹“/var/lib/pgadmin”和“/var/log/pgadmin”,并为运行 Web 服务器的用户(apache 或启动“桌面”版本的用户)设置适当的写入权限。

  2. 确保你的环境中安装了 pip:

    conda pip install
    
  3. 下载了最新的车轮锉并使用 pip 安装它:

    pip install ./pgadmin4-4.22-py2.py3-none-any.whl
    
  4. 将 pyasn1 升级到版本 0.4.8:

    pip install pyasn1==0.4.8
    

    升级到最新版本:

    pip install --upgrade pyasn1
    
  5. 运行以下命令并按照说明设置 pgAdmin4 Web 服务器的管理员帐户:

    pgAdmin4
    

    或者

    pgadmin4
    

每次启动 pgAdmin4 时,您必须先激活您的 conda 环境,然后运行命令“pgAdmin4”或“pgadmin4”。

如果您需要 WSGI 配置文件,您可以在 [/miniconda/installation/path]/lib/python3.X/site-packages/pgadmin4/ 或 [/miniconda/installation/path]/envs/[your_virtualenv_name]/lib/python3.X/site-packages/pgadmin4/ 找到它。

要为 pgAdmin4 部署 WSGI 服务器,请检查此处文档

最后,如果您想使用“/var/lib/pgadmin”和“/var/log/pgadmin”的不同路径:

  1. config_local.py在现有文件旁边创建一个文件config.py。您可以在 WSGI 配置文件所在的同一目录中找到它。

  2. 编辑config_local.py并添加以下设置。在大多数情况下,默认文件位置应该是合适的:

    LOG_FILE = '/var/log/pgadmin/pgadmin.log'
    SQLITE_PATH = '/var/lib/pgadmin/pgadmin.db'
    SESSION_DB_PATH = '/var/lib/pgadmin/sessions'
    STORAGE_DIR = '/var/lib/pgadmin/storage'
    

相关内容