使用S3作为存储来部署django网站,该网站在pythonanywhere上可以在本地良好运行,这会产生一个奇怪的错误,我无法在Google上找到以下解决方案:
“ TypeError:需要一个类似字节的对象,而不是'str'”
我做错了什么?
我尝试将环境变量排除在settings.env(aws键,secret_key等)之外,并直接在我的settings.py应用程序中设置了它们。 +我能找到的每条建议,但还是一样:(
这是我的/var/www/username_pythonanywhere_com_wsgi.py:
# +++++++++++ DJANGO +++++++++++
# To use your own Django app use code like this:
import os
import sys
from dotenv import load_dotenv
project_folder = os.path.expanduser('~/portfolio_pa/WEB') # adjust as appropriate
load_dotenv(os.path.join(project_folder, 'settings.env'))
# assuming your Django settings file is at '/home/myusername/mysite/mysite/settings.py'
path = '/home/corebots/portfolio_pa'
if path not in sys.path:
sys.path.insert(0, path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'WEB.settings'
## Uncomment the lines below depending on your Django version
###### then, for Django >=1.5:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
###### or, for older Django <=1.4
#import django.core.handlers.wsgi
#application = django.core.handlers.wsgi.WSGIHandler()
我希望该网站能够像在本地一样正常运行。
答案 0 :(得分:0)
Boto库没有很好的Python3支持。 boto bugtracker中已知此特定问题:https://github.com/boto/boto/issues/3837
解决此问题的最佳方法是使用boto3,它具有不错的Python3支持,并且通常是受支持最多的适用于Python的AWS开发工具包。
它在您的本地计算机上运行而在生产环境上不运行的原因是pythonanywhere设置似乎正在使用代理来触发此不兼容的boto代码。请参阅实际的调用代码:https://github.com/boto/boto/blob/master/boto/connection.py#L747
您的错误回溯确认了这一点。
不幸的是,我对django-photologue
并不熟悉,但是简单的观察并不能说明它强烈依赖于boto3。也许我错了。
我仍然认为最好的方法是使用boto3。作为备份策略,您可以为boto修复此问题并安装它,而不是安装PyPI上的官方版本:https://github.com/boto/boto/pull/3699