Bis*_*hal 4 django amazon-s3 amazon-web-services boto3
我django在python虚拟环境(virtualenv)中运行。该django网站由apache2Amazon ec2实例(ubuntu 16.04)提供服务。我使用boto3模块写到亚马逊S3。
我正确安装awscli并运行aws configure并设置了AWS Access 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
Run Code Online (Sandbox Code Playgroud)
我弄清楚了我得到错误的原因。我会发布答案,以防万一其他人遇到此问题。
tl; dr:aws配置文件不在Apache的主目录中
django应用程序在用户www-data(apache2)下运行。当我使用配置凭据时aws configure,我的设置存储在.aws/config文件中。
该.aws/configure文件存储在我的主目录中,而不是默认情况下的www-data(apache2)的主目录中/var/www。因此,当django应用程序调用boto3模块时,该模块正在中查找配置文件,/var/www/.aws/config而我的文件在中/home/ubuntu/.aws/config。
只需复制相关文件即可/var/www/为我解决问题。
| 归档时间: |
|
| 查看次数: |
3405 次 |
| 最近记录: |