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__ 未设置

ValueError:属性Users.request是必需的

具有互斥必需参数的命令行解析器

缺少必需的参数(laravel 8.8.0)