web-dev-qa-db-fra.com

Impossible d'importer le nom _uuid_generate_random dans heroku django

Je travaille sur un projet qui analyse la boîte de réception de l'utilisateur gmail et fournit un rapport. Je l'ai déployé dans herok avec les spécifications suivantes:

Langue: Python 2.7

Cadre: Django 1.8

Planificateur de tâches: Celery (Rabbitmq-bigwig pour l'URL du courtier)

Maintenant, quand Heroku l'exécute, le céleri ne me donne pas le résultat. Sur Heroku Appuyez sur sa représentation erreur de configuration Collectstatic. J'ai essayé d'utiliser paquet whitenoise

Également essayé d'exécuter: heroku run python manage.py collectstatic --dry-run --noinput toujours la même erreur.

$ heroku run python manage.py collectstatic --noinput a donné les détails suivants de l'erreur.

File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/Django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python2.7/site-packages/Django/core/management/__init__.py", line 303, in execute
settings.INSTALLED_APPS
File "/app/.heroku/python/lib/python2.7/site-packages/Django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/app/.heroku/python/lib/python2.7/site-packages/Django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/app/.heroku/python/lib/python2.7/site-packages/Django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/app/.heroku/python/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/app/salesblocker/__init__.py", line 5, in <module>
from .celery import app as celery_app 
File "/app/salesblocker/celery.py", line 5, in <module>
from celery import Celery
File "/app/.heroku/python/lib/python2.7/site-packages/celery/__init__.py", line 131, in <module>
from celery import five  # noqa
File "/app/.heroku/python/lib/python2.7/site-packages/celery/five.py", line 153, in <module>
from kombu.utils.compat import OrderedDict  # noqa
File "/app/.heroku/python/lib/python2.7/site-packages/kombu/utils/__init__.py", line 19, in <module>
from uuid import UUID, uuid4 as _uuid4, _uuid_generate_random
ImportError: cannot import name _uuid_generate_random

J'ai également essayé d'annuler la validation de heroku avec une précédente validation de travail et de cloner ce code, mais lors de la prochaine validation (modifications: suppression d'une image de support du dossier des supports), elle affiche à nouveau la même erreur.

Merci d'avance

55
akhi1

Vous rencontrez ce problème , ce qui affecte Python 2.7.11 (le kombu est requis par le céleri).

Le problème est résolu dans Kombu 3.0.30.

113
Alasdair

Bien que la mise à niveau de kombu soit l'option idéale, si vous êtes coincé avec des dépendances plus anciennes qui ne le permettent pas, le placer au sommet de mes paramètres.

import uuid
uuid._uuid_generate_random = None

Cela fonctionne parce que _uuid_generate_random a été supprimé ici , et cela restaure simplement la valeur par défaut. Ce hack semble raisonnable car Kombu ne vérifie que ceci contournement d'un bogue résolu en 2007 , et si vous avez besoin de ce correctif à cause d'une récente Python, vous ne l'êtes pas de manière inhérente) pas affecté :)

45
mrooney

Oui, le problème mentionné par Alasdair était responsable de l'erreur. J'ai résolu le problème dans mon projet en suivant ce workflow pour ne conserver que l'essentiel Requirements-to-Freeze.txt où I liste céleri, mais pas ses dépendances comme Kombu.

Ensuite, il suffit de mettre à jour les paquetages essentiels, puis de re-geler la liste complète des dépendances avec la version de Kombu qui fonctionne.

pip install --upgrade -r requirements-to-freeze.txt
pip freeze > requirements.txt

Et testez des choses pour vous assurer que la mise à niveau ne casse pas autre chose;)

2
metakermit