heroku /处的ValueError(未设置必需的参数名称)

cigdeys3  于 2022-11-13  发布在  其他
关注(0)|答案(9)|浏览(144)

我正在尝试用django和python做一个博客应用程序。我也在尝试用s3 bucket来存储,用heroku来部署。我正在按照coreymschafer的在线教程做。我做的每件事都和教程一样,但是我得到了那个错误。我不知道该怎么做。请帮助!
我也安装了boto 3和django-storages。但是,我觉得问题是boto 3的一些原因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'
cgfeq70w

cgfeq70w1#

出现了同样的问题。注解掉这一行,代码再次正常工作:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

发现这是因为,即使我已经重新启动了我的PC,其中一个环境变量,我引用是不正确的设置:

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'
flvlnr44

flvlnr442#

终止本地服务器,关闭命令提示符。然后重新启动命令提示符。再次运行服务器并重试。如果执行此操作后出现以下错误:不支持您提供的授权机制。请使用AWS 4-HMAC-SHA 256将其放在您的settings.py:

AWS_S3_REGION_NAME = 'us-east-2' #change to your region
AWS_S3_SIGNATURE_VERSION = 's3v4'
wr98u20j

wr98u20j3#

我的问题是服务器没有更新它的环境变量。请尝试重新启动服务器以使环境变量生效。

z9ju0rcb

z9ju0rcb4#

我遇到了和你一样的问题,可能你没有在服务器端设置AWS环境变量,尽管你在本地机器上设置了它们。所以,你可以复制本地.bash_profile文件中的导出命令,在那里你设置了AWS环境变量,然后将它们粘贴到服务器端的.bash_profile文件中。

4sup72z8

4sup72z85#

我也遵循了同样的教程。当我在Heroku上部署它时,我面临着完全相同的问题。
当我使用以下命令将环境变量添加到heroku时,问题得到了解决

heroku配置:设置变量名=“值”

希望这能解决您的问题。

uhry853o

uhry853o6#

即使您遵循了注解中的所有建议,但仍然不起作用,请在settings.py中添加以下代码:

AWS_S3_ADDRESSING_STYLE = 'virtual'

这对我很有效,我在us-east-2地区。如果你所在的地区不同,请考虑阅读Github上的这一期。(在我遵循了下面的所有建议后,在那里找到了我的解决方案。)

w6lpcovy

w6lpcovy7#

如果有人在学习教程时偶然发现了这个问题,如果您使用的是MacOS Catalina 或更高版本,则终端已从bash更改为zsh。
我在.zshenv中添加了我的环境变量,并且能够解决这个问题。

fzwojiic

fzwojiic8#

一字一句地评论
STATICFILES_STORAGE = '存储器.后端.S3Boto3.S3Boto3存储器'

mccptt67

mccptt679#

我也遇到过同样的问题。我解决问题的方法是这样的:
1.转到AWS控制台
1.选择存储区的名称
1.选择属性
1.选择加密
1.点击阅读更多..(这将引导您到您的权限选项卡)
1.解除封锁权限。
我知道这不是最好的方法和做法。但我可以沿着。如果有人在这里有同样的麻烦,请分享!

相关问题