python - 'ValueError: 未设置必需参数' Django 应用程序遵循 AWS 配置和 Heroku 部署
问题描述
我刚刚将我的 Django 应用程序部署到 Heroku,并将应用程序配置为将媒体文件存储在 AWS S3 存储桶中。在开发服务器中一切正常,但是当我尝试在 Heroku 托管版本中访问包含这些图像的页面时,我收到一个 ValueError 通知我尚未设置所需的参数“名称”。
回顾追溯表明,所谓的无名对象是图像。s3boto3 也被引用。我对 AWS 的配置详述如下:
# settings.py
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = os.environ.get('AWS_S3_REGION_NAME')
S3_USE_SIGV4 = os.environ.get('S3_USE_SIGV4')
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
# env.py
os.environ.setdefault("AWS_ACCESS_KEY_ID", "**********")
os.environ.setdefault("AWS_SECRET_ACCESS_KEY", "**********")
os.environ.setdefault("AWS_STORAGE_BUCKET_NAME", "**********")
os.environ.setdefault("AWS_S3_REGION_NAME", "eu-west-2")
os.environ.setdefault('S3_USE_SIGV4', 'True')
我已经阅读了可能需要在配置中添加 AWS_SESSION_TOKEN 的建议,但我不知道如何识别我的。我还在其他地方读到会话令牌不是配置的必要部分。我只是在寻找指导,这样我就不会浪费时间尝试无法解决问题的事情。
这是错误:
ValueError at /accelerators/
Required parameter name not set
Request Method: GET
Request URL: https://acceler8.herokuapp.com/accelerators/
Django Version: 2.2.2
Exception Type: ValueError
Exception Value:
Required parameter name not set
Exception Location: /app/.heroku/python/lib/python3.6/site-packages/boto3/resources/base.py in __init__, line 119
Python Executable: /app/.heroku/python/bin/python
Python Version: 3.6.8
Python Path:
['/app/.heroku/python/bin',
'/app',
'/app/.heroku/python/lib/python36.zip',
'/app/.heroku/python/lib/python3.6',
'/app/.heroku/python/lib/python3.6/lib-dynload',
'/app/.heroku/python/lib/python3.6/site-packages']
Server time: Thu, 22 Aug 2019 08:34:43 +0000
Error during template rendering
In template /app/accounts/templates/accounts/base.html, error at line 39
Required parameter name not set
29 <ul class="navbar-nav">
30 <li class="nav-item">
31 <a class="nav-item nav-link" href="{% url 'index' %}">Home</a>
32 </li>
33 {% if user.is_superuser %}
34 <li class="nav-item">
35 <a class="nav-item nav-link" href="{% url 'accelerator_create' %}">Add Company</a>
36 </li>
37 {% endif %}
38 <li class="nav-item">
39 <a class="nav-item nav-link" href="{% url 'accelerators' %}">Companies</a>
40 </li>
41 <li class="nav-item">
42 <a class="nav-item nav-link" href="{% url 'reviews' %}">Latest Reviews</a>
43 </li>
44 {% if user.is_authenticated %}
45 <li class="nav-item">
46 <a class="nav-item nav-link" href="{% url 'logout' %}">Log Out</a>
47 </li>
48 {% else %}
49 <li class="nav-item">
Traceback Switch to copy-and-paste view
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
_resolve_lookup
current = current[bit] …
▶ Local vars
During handling of the above exception ('ImageFieldFile' object is not
subscriptable), another exception occurred:
/app/.heroku/python/lib/python3.6/site-
packages/django/core/handlers/exception.py in inner
response = get_response(request) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/core/handlers/base.py in _get_response
response = self.process_exception_by_middleware(e, request) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/core/handlers/base.py in _get_response
response = response.render() …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/template/response.py in render
self.content = self.rendered_content …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/template/response.py in rendered_content
content = template.render(context, self._request) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/template/backends/django.py in render
return self.template.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render
return self._render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
_render
return self.nodelist.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render
bit = node.render_annotated(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render_annotated
return self.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/template/loader_tags.py in render
return compiled_parent._render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
_render
return self.nodelist.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render
bit = node.render_annotated(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render_annotated
return self.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/template/loader_tags.py in render
result = block.nodelist.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render
bit = node.render_annotated(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render_annotated
return self.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/template/defaulttags.py in render
return nodelist.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render
bit = node.render_annotated(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render_annotated
return self.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/template/defaulttags.py in render
nodelist.append(node.render_annotated(context)) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render_annotated
return self.render(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
render
output = self.filter_expression.resolve(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
resolve
obj = self.var.resolve(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
resolve
value = self._resolve_lookup(context) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in
_resolve_lookup
current = getattr(current, bit) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/django/db/models/fields/files.py in url
return self.storage.url(self.name) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-
packages/storages/backends/s3boto3.py in url
params['Bucket'] = self.bucket.name …
▼ Local vars
Variable Value
expire
3600
name
'logos/Founderd_Factory_MkvklIQ.png'
parameters
None
params
{}
self
<storages.backends.s3boto3.S3Boto3Storage object at 0x7fef0d5307f0>
/app/.heroku/python/lib/python3.6/site-packages/storages/backends/s3boto3.py in bucket
self._bucket = self._get_or_create_bucket(self.bucket_name) …
▼ Local vars
Variable Value
self
<storages.backends.s3boto3.S3Boto3Storage object at 0x7fef0d5307f0>
/app/.heroku/python/lib/python3.6/site-packages/storages/backends/s3boto3.py in _get_or_create_bucket
bucket = self.connection.Bucket(name) …
▼ Local vars
Variable Value
name
None
self
<storages.backends.s3boto3.S3Boto3Storage object at 0x7fef0d5307f0>
/app/.heroku/python/lib/python3.6/site-packages/boto3/resources/factory.py in create_resource
client=self.meta.client)(*args, **kwargs) …
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/boto3/resources/base.py in __init__
'Required parameter {0} not set'.format(identifier)) …
▶ Local vars
解决方案
推荐阅读
- spring - 如何使用springboot将excel上传到数据库
- sql-server - 插入具有 varbinary(max) 列的 SQL 数据库表可能会很慢
- sql - 在PostgreSQL中划分两个查询
- reactjs - 如何序列化名称与数据结构不同的表单
- vue.js - 如何在单独的组件中导入组件,但同时在构建大小中只导入一次?
- linux - 使“找不到库”
- amazon-web-services - Ansible - 即使在以前失败的情况下也能发挥作用
- r - 尝试为二分网络计算 H2 时未找到对象“H2_max”
- python - Python 线性回归:plt.plot() 不显示直线。相反,它连接散点图上的每个点
- vlc - 我可以在 Raspberry Pi 4 上使用 python-vlc 访问 VLC 扩展吗?