python - Python间歇性OpenSSL错误:FileNotFoundError:[Errno 2]没有这样的文件或目录
问题描述
尝试使用 kubernetes 客户端库时,我的生产 Django 网站(在 UWSGI 下运行)出现间歇性错误。错误似乎是 urllib3,或者可能是 OpenSSL。奇怪的是,我可以简单地重新启动我的服务器,问题就消失了,但只是暂时的。过了一会儿,我又开始看到这个错误:
Traceback (most recent call last):
File "/srv/hive/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 353, in ssl_wrap_socket
context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data)
FileNotFoundError: [Errno 2] No such file or directory
这很难排除故障,因为重新启动服务器会使问题消失几个小时。load_verify_locations
我在函数中添加了一些额外的日志记录,urllib3/util/ssl_.py
以查看它试图打开的文件。ca_certs
参数传入一个临时文件,/tmp/tmp2xng8a6e
. 其他两个参数是None
。
那么,为什么是临时文件,为什么它会丢失?临时文件会被删除是否有原因,或者为什么 urllib3 可能不会首先创建临时文件?
这是回溯的完整例外:
Aug 20 10:36:05 ERROR django.request: Internal Server Error: /code/projects/test-project/
Traceback (most recent call last):
File "/srv/hive/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 353, in ssl_wrap_socket
context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data)
FileNotFoundError: [Errno 2] No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 677, in urlopen
chunked=chunked,
File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 381, in _make_request
self._validate_conn(conn)
File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 976, in _validate_conn
conn.connect()
File "/srv/hive/lib/python3.6/site-packages/urllib3/connection.py", line 370, in connect
ssl_context=context,
File "/srv/hive/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 355, in ssl_wrap_socket
raise SSLError(e)
urllib3.exceptions.SSLError: [Errno 2] No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/srv/hive/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/srv/hive/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/srv/hive/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/srv/hive/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/srv/hive/src/hive/ide/views.py", line 67, in ide
utils.init_workspace(project)
File "/srv/hive/src/hive/ide/utils.py", line 252, in init_workspace
get_user_storage_resource(project.user).apply()
File "/srv/hive/src/hive/ide/utils.py", line 79, in apply
responses.append(item.apply())
File "/srv/hive/src/hive/ide/utils.py", line 221, in apply
if self.exists:
File "/srv/hive/src/hive/ide/utils.py", line 165, in exists
self._call('read')
File "/srv/hive/src/hive/ide/utils.py", line 152, in _call
return func(**kwargs)
File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api/core_v1_api.py", line 18854, in read_namespaced_persistent_volume_claim
(data) = self.read_namespaced_persistent_volume_claim_with_http_info(name, namespace, **kwargs) # noqa: E501
File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api/core_v1_api.py", line 18945, in read_namespaced_persistent_volume_claim_with_http_info
collection_formats=collection_formats)
File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 345, in call_api
_preload_content, _request_timeout)
File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 176, in __call_api
_request_timeout=_request_timeout)
File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 366, in request
headers=headers)
File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/rest.py", line 241, in GET
query_params=query_params)
File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/rest.py", line 214, in request
headers=headers)
File "/srv/hive/lib/python3.6/site-packages/urllib3/request.py", line 76, in request
method, url, fields=fields, headers=headers, **urlopen_kw
File "/srv/hive/lib/python3.6/site-packages/urllib3/request.py", line 97, in request_encode_url
return self.urlopen(method, url, **extra_kw)
File "/srv/hive/lib/python3.6/site-packages/urllib3/poolmanager.py", line 336, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 765, in urlopen
**response_kw
File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 765, in urlopen
**response_kw
File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 765, in urlopen
**response_kw
File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 725, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "/srv/hive/lib/python3.6/site-packages/urllib3/util/retry.py", line 439, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='ide-ideresourcegroup-207977-dbdb0faf.hcp.centralus.azmk8s.io', port=443): Max retries exceeded with url: /api/v1/namespaces/ide/persistentvolumeclaims/workspace-storage-5p2lm91r (Caused by SSLError(FileNotFoundError(2, 'No such file or directory'),))
解决方案
推荐阅读
- graphviz - Graphviz dot-file 疯狂边缘定位
- c - 如何在 Windows 中随时(同时)发送数据?
- python - 提取来自beautifulsoup的部分字符串
- python-2.7 - Python 2 Tornado 异步方法
- php - 无法使用 xmlapi 在 cpanel 中创建数据库
- html - 如何使用 HTML 在 Angular 6 的一列中设置 6 个按钮
- java - Mac App Store 提交失败,因为嵌入式 Java 11 框架包含现有的 CFBundleIdentifier
- angular - 如何使打字稿按顺序执行代码?
- javascript - 尝试在 javascript 中应用 CSS 转换
- sql - 我应该为议会投票模式使用哪种数据类型?