gpt4 book ai didi

django - NoCredentialsError : Unable to locate credentials - python module boto3

转载 作者:行者123 更新时间:2023-12-03 15:50:34 26 4
gpt4 key购买 nike

我正在运行djangopython虚拟环境(virtualenv)。 django网站由 apache2 提供服务来自亚马逊 ec2 实例(ubuntu 16.04)。我用 boto3写入亚马逊 s3 的模块。

我安装了awscli并运行 aws configure并正确设置我的 aws 访问 key 。 (我知道我配置正确,因为 $ aws s3 ls 返回我的 s3 存储桶的正确列表。)

但是,当我尝试从 django 应用程序将一些对象写入 s3 时,它无法产生标题中描述的错误。

我最近搬到了一个新实例并开始使用 python 虚拟环境。在此之前,它曾经运行良好。 我已经阅读了关于 SO 的问题和来自 aws 的文档。下面是堆栈跟踪。

Environment:


Request Method: POST
Request URL: http://*******/product/4

Django Version: 1.10.6
Python Version: 3.5.2
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'abc.apps.abcdirectConfig')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')



Traceback:

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
42. response = get_response(request)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)

File "/home/ubuntu/abcdirect/abcdirect/views.py" in view_product
385. s3.Bucket('abccms').put_object(Key=s3_file_name, Body=s3_file_data)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/boto3/resources/factory.py" in do_action
520. response = action(self, *args, **kwargs)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/boto3/resources/action.py" in __call__
83. response = getattr(parent.meta.client, operation_name)(**params)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/client.py" in _api_call
253. return self._make_api_call(operation_name, kwargs)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/client.py" in _make_api_call
530. operation_model, request_dict)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/endpoint.py" in make_request
141. return self._send_request(request_dict, operation_model)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/endpoint.py" in _send_request
166. request = self.create_request(request_dict, operation_model)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/endpoint.py" in create_request
150. operation_name=operation_model.name)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/hooks.py" in emit
227. return self._emit(event_name, kwargs)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/hooks.py" in _emit
210. response = handler(**kwargs)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/signers.py" in handler
90. return self.sign(operation_name, request)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/signers.py" in sign
147. auth.add_auth(request)

File "/home/ubuntu/.virtualenv/lib/python3.5/site-packages/botocore/auth.py" in add_auth
679. raise NoCredentialsError

Exception Type: NoCredentialsError at /product/4
Exception Value: Unable to locate credentials

最佳答案

我弄清楚了我收到错误的原因。我发布答案以防其他人遇到此问题。
tl;博士:aws 配置文件不在 apache 的主目录中
django 应用程序在用户 www-data(apache2) 下运行。当我使用 aws configure 配置我的凭据时,我的设置存储在 .aws/config文件。
现在这就是问题所在。.aws/configure文件存储在 我的 主目录,而不是在 的主目录中www-数据 (apache2),即 /var/www默认情况下。因此,当 django 应用调用 boto3 模块时,该模块正在寻找 /var/www/.aws/config 中的配置文件但我的文件在 /home/ubuntu/.aws/config .
只需将相关文件复制到/var/www/为我解决了这个问题。

关于django - NoCredentialsError : Unable to locate credentials - python module boto3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43069708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com