【发布时间】:2016-04-26 21:19:48
【问题描述】:
我正在尝试设置动态缩略图服务thumbor 并支持 s3 作为存储,我需要设置这个社区支持的pip library for aws。
它在我的本地环境中运行良好,但是当我尝试在我们的一台服务器上托管它时,我收到 NoCredentialsError。我假设这是因为 botocore 的不同版本(最新的一个和一个由 pip 库安装)。这是错误日志:
File "/usr/local/lib/python2.7/dist-packages/botocore/session.py", line 774, in get_component
# client config from the session
File "/usr/local/lib/python2.7/dist-packages/botocore/session.py", line 174, in <lambda>
self._components.lazy_register_component(
File "/usr/local/lib/python2.7/dist-packages/botocore/session.py", line 453, in get_data
- agent_version is the value of the `user_agent_version`
File "/usr/local/lib/python2.7/dist-packages/botocore/loaders.py", line 119, in _wrapper
data = func(self, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/botocore/loaders.py", line 364, in load_data
DataNotFoundError: Unable to load data for: _endpoints
2016-04-24 12:14:34 tornado.application:ERROR Future exception was never retrieved: Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 230, in wrapper
yielded = next(result)
File "/usr/local/lib/python2.7/dist-packages/thumbor/handlers/imaging.py", line 31, in check_image
exists = yield gen.maybe_future(self.context.modules.storage.exists(kw['image'][:self.context.config.MAX_ID_LENGTH]))
File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 455, in wrapper
future.result()
File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 215, in result
raise_exc_info(self._exc_info)
File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 443, in wrapper
result = f(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tc_aws/aws/storage.py", line 107, in exists
self.storage.get(file_abspath, callback=return_data)
File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 455, in wrapper
future.result()
File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 215, in result
raise_exc_info(self._exc_info)
File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 443, in wrapper
result = f(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tc_aws/aws/bucket.py", line 44, in get
Key=self._clean_key(path),
File "/usr/local/lib/python2.7/dist-packages/tornado_botocore/base.py", line 97, in call
return self._make_api_call(operation_name=self.operation, api_params=kwargs, callback=callback)
File "/usr/local/lib/python2.7/dist-packages/tornado_botocore/base.py", line 60, in _make_api_call
operation_model=operation_model, request_dict=request_dict, callback=callback)
File "/usr/local/lib/python2.7/dist-packages/tornado_botocore/base.py", line 54, in _make_request
request_dict=request_dict, operation_model=operation_model, callback=callback)
File "/usr/local/lib/python2.7/dist-packages/tornado_botocore/base.py", line 32, in _send_request
request = self.endpoint.create_request(request_dict, operation_model)
File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 126, in create_request
operation_name=operation_model.name)
File "/usr/local/lib/python2.7/dist-packages/botocore/hooks.py", line 226, in emit
return self._emit(event_name, kwargs)
File "/usr/local/lib/python2.7/dist-packages/botocore/hooks.py", line 209, in _emit
response = handler(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/botocore/signers.py", line 90, in handler
return self.sign(operation_name, request)
File "/usr/local/lib/python2.7/dist-packages/botocore/signers.py", line 124, in sign
signer.add_auth(request=request)
File "/usr/local/lib/python2.7/dist-packages/botocore/auth.py", line 626, in add_auth
raise NoCredentialsError
NoCredentialsError: Unable to locate credentials
可以通过我安装库的正确顺序来修复它吗?因为 pip 库删除了现有的较新版本的 botocore 并安装了旧版本。
编辑:
我正在使用主管运行进程,但似乎进程无法访问 aws 凭据
编辑 2:
通过正确配置主管解决了该问题。主管启动的进程的用户无权访问配置文件
【问题讨论】:
-
您的服务器似乎没有正确配置凭据。你如何在你的服务器和你的开发机器上设置你的凭据?关于版本,tc_aws 似乎对 botocore 1.2.0 有很强的依赖关系,因此如果升级超过该版本,它可能无法正常工作。
-
是的,tc_aws 将 botocore 降级到 1.2.0。使用当前配置,我尝试使用 boto3 从命令行连接到 s3 存储桶,它可以工作。我不知道安装这些库的正确顺序是什么。
-
@JordonPhillips 我想我解决了这个问题。我正在使用主管运行进程,然后进程无法访问 aws 凭据
-
似乎是您的问题的一部分原因是不使用 virtualenv。您不应该使用“sudo pip”安装软件包。
-
@mootmoot 是的,应该使用 virtualenv 并且不使用 sudo 进行 pip 安装
标签: amazon-web-services amazon-s3 boto3 botocore