ValueError at /(未设置必需的参数名称)
Posted
技术标签:
【中文标题】ValueError at /(未设置必需的参数名称)【英文标题】:ValueError at / (Required parameter name not set) 【发布时间】:2020-04-25 15:35:18 【问题描述】:我正在尝试使用 django 和 python 制作博客应用程序。我还尝试使用 s3 存储桶进行存储,使用 heroku 进行部署。我正在关注 coreymschafer 的在线教程。我正在按照教程做所有事情,但我得到了那个错误。我不知道该怎么做。请帮忙!
我还安装了 boto3 和 django-storages。但是,我觉得问题出在 boto3 上,因为某种原因enter image description here。我附上了问题的截图,也只是想声明base.html没有问题
请帮忙!谢谢你
我将这些添加到我的 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_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
【问题讨论】:
你能确定你是否在heroku中正确设置了环境变量吗? 是的,我有。这个问题我研究了一个小时,还是不知道是什么问题 【参考方案1】:有同样的问题。 注释掉这一行,代码又可以正常工作了:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
发现这是因为,即使我已经重新启动了我的电脑,我引用的环境变量之一设置不正确:
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')
我使用 Python 控制台检查过:
import os
print(os.environ.get('AWS_ACCESS_KEY_ID'))
print(os.environ.get('AWS_SECRET_ACCESS_KEY'))
print(os.environ.get('AWS_STORAGE_BUCKET_NAME'))
并确保 Python 可以正确访问所有值。 然后带回来:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
【讨论】:
我有一个拼写错误,一个变量中有一个“双下划线”,可能来自复制粘贴......谢谢,这帮助我找到了它。【参考方案2】:杀死你的本地服务器,关闭你的命令提示符。并重新启动您的命令提示符。 再次运行服务器并尝试。 如果这样做之后您有此错误:您提供的授权机制不受支持。请使用 AWS4-HMAC-SHA256 把它放在你的 settings.py 中:
AWS_S3_REGION_NAME = 'us-east-2' #change to your region
AWS_S3_SIGNATURE_VERSION = 's3v4'
【讨论】:
【参考方案3】:我遇到了和你一样的问题,你可能没有在服务器端设置 AWS 环境变量,尽管你在本地机器上设置了它们。因此,您可以将导出命令复制到您设置 AWS 环境变量的本地 .bash_profile 文件中,然后将它们粘贴到服务器端的 .bash_profile 文件中。
【讨论】:
【参考方案4】:我也遵循了相同的教程。 当我在 heroku 上部署它时,我遇到了完全相同的问题。
当我使用将环境变量添加到 heroku 时,它得到了解决
heroku 配置:设置 variable_name="value"
希望这能解决您的问题。
【讨论】:
【参考方案5】:即使您遵循了有关 cmets 的所有建议但仍然无法正常工作,请在 settings.py
中添加以下代码:
AWS_S3_ADDRESSING_STYLE = 'virtual'
这对我有用,我在us-east-2
地区。如果您所在的地区不同,请考虑在Github 上阅读此问题。 (在我遵循以下所有建议后,在那里找到了我的解决方案。)
【讨论】:
【参考方案6】:如果有人在学习本教程并偶然发现了这个问题,如果您使用的是 MacOS Catalina 或更高版本,则终端已从 bash 更改为 zsh。
我在 .zshenv 中添加了我的环境变量并且能够解决这个问题。
【讨论】:
【参考方案7】:我的问题是服务器没有更新它的环境变量。 尝试重新启动服务器以使环境变量生效。
【讨论】:
【参考方案8】:我确实有同样的问题。 我解决它的方式是这样的:
-
转到您的 AWS 控制台
选择存储桶的名称
选择属性
选择加密
点击阅读更多..(这将引导您进入您的权限选项卡)
取消阻止权限。
我知道这不是最好的方法和做法。但我可以继续前进。 如果这里有人遇到同样的问题,请分享!
【讨论】:
以上是关于ValueError at /(未设置必需的参数名称)的主要内容,如果未能解决你的问题,请参考以下文章
ValueError: need at most 63 handles, got a sequence of length 65
ValueError: jpeg 是必需的,除非使用 --disable-jpeg 明确禁用,中止
PIL/Pillow - ValueError: py.__spec__ 未设置