#django #heroku #redis
#django #heroku #redis
Вопрос:
Я пытаюсь развернуть свое приложение Django с Redis на Heroku, но оно не сработало и в журналах появилась ошибка.
Я установил Redis для Windows отсюда.
Это мой Procfile
:
web: gunicorn mysite.wsgi --log-file -
worker: bash Redis/redis-server.exe
Мои журналы:
2020-12-04T01:56:26.263759 00:00 app[worker.1]: Redis/redis-server.exe: Redis/redis-server.exe: cannot execute binary file
2020-12-04T01:56:26.346545 00:00 heroku[worker.1]: Process exited with status 126
2020-12-04T01:56:26.735800 00:00 heroku[worker.1]: State changed from up to crashed
Версия Heroku
heroku/7.47.3 win32-x64 node-v12.16.2
Я использую Windows, и я почти уверен, что мой системный тип — 64-битная операционная система. Что не так с моим приложением? Как я могу это исправить?
Ответ №1:
Я использую Windows, и я почти уверен, что мой системный тип — 64-битная операционная система
Вы могли бы быть, но Heroku нет.
Стеки Heroku основаны на Ubuntu Linux или Docker. Вы не сможете запускать двоичные файлы Windows на Heroku.
Судя по вашему Procfile
, похоже, что вы пытаетесь запустить сервер Redis:
worker: bash Redis/redis-server.exe
Это противоречит архитектуре Heroku. Вместо этого используйте соответствующее дополнение. На данный момент существует как минимум пять официально поддерживаемых опций:
- Повторный запуск
- Redis Cloud
- openredis
- RedisGreen
- Heroku Redis
Взгляните на их предложения, выберите одно и подготовьте его. По крайней мере, некоторые из них имеют свободные уровни.
Вы найдете инструкции по подключению в соответствующей документации, но обычно каждый аддон устанавливает переменную конфигурации, которая на самом деле является просто переменной среды. Например, наборы Redis To Go REDISTOGO_URL
, к которым вы можете получить доступ из своего кода приложения следующим образом:
import os
import redis
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
redis = redis.from_url(redis_url)
Комментарии:
1. спасибо за ваш ответ. Вместо этого я попробовал heroku-redis. Я, наконец, подключил myapp к redis. Но это вызвало следующую ошибку, которая была решена путем выполнения redis-server.exe . Сбой подключения WebSocket к «моему приложению»: ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 200
2. ОК. Я хочу убедиться в одном, прежде чем принять его. Невозможно ли выполнить redis-сервер таким образом? @Chris
3. @zrdaisuke., невозможно запускать двоичные файлы Windows на Heroku, включая версию Redis для Windows. Отправка двоичного файла Linux также вряд ли будет работать, поскольку веб-динамикам разрешено предоставлять только один порт: тот, который принимает запросы HTTPS. Вы не можете прослушивать второй порт, например, чтобы принимать соединения для Redis. Кроме того, динамо-машины предназначены для одноразового использования. Они постоянно перезапускаются, и вы, вероятно, не хотите, чтобы ваше хранилище данных теряло данные каждый день. Кроме того, выполнение этого способа Heroku означает, что вы можете тривиально масштабироваться до нескольких динамометров.
4. Спасибо за ваши добрые ответы. Я сосредоточусь на том, как отладить другую проблему. @Chris