Какие изменения необходимы для моего приложения django при развертывании в pythonany где-нибудь? ошибка указывает на никуда - PullRequest
1 голос
/ 27 июня 2019

Развертывание моего сайта django с S3 в качестве хранилища, которое работает локально на 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()

Я ожидаю, что веб-сайт будет работать так же, как и локально.

1 Ответ

0 голосов
/ 27 июня 2019

Библиотека Boto не имеет хорошей поддержки Python3. Эта конкретная проблема известна в багтрекере boto: https://github.com/boto/boto/issues/3837

Лучший способ исправить это - использовать boto3 , который имеет приличную поддержку Python3 и является обычно наиболее поддерживаемым AWS SDK для Python.

Причина, по которой он работает на вашем локальном компьютере и не работает на производстве, заключается в том, что программа установки 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

...