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'
你还必须安装 libpq 来编译 psycopg2
总结一下我的步骤是:
- sudo apt 安装 libpq-dev
- 使用 python 3.8 激活虚拟环境
- pip 安装 -r pip_freeze_output_file.txt
- 修复 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 中。
一旦我创建并激活虚拟环境,我就会:
创建文件夹“/var/lib/pgadmin”和“/var/log/pgadmin”,并为运行 Web 服务器的用户(apache 或启动“桌面”版本的用户)设置适当的写入权限。
确保你的环境中安装了 pip:
conda pip install
下载了最新的车轮锉并使用 pip 安装它:
pip install ./pgadmin4-4.22-py2.py3-none-any.whl
将 pyasn1 升级到版本 0.4.8:
pip install pyasn1==0.4.8
升级到最新版本:
pip install --upgrade pyasn1
运行以下命令并按照说明设置 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”的不同路径:
config_local.py
在现有文件旁边创建一个文件config.py
。您可以在 WSGI 配置文件所在的同一目录中找到它。编辑
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'