2015-12-10 11 views
51

Ich arbeite an einem Projekt, das Gmail-Posteingang scannt und einen Bericht bereitstellt. Ich habe es in Heroku eingesetzt mit folgenden Spezifikationen:Name kann nicht importiert werden _uuid_generate_random in heroku django

Sprache: Python 2.7

Framework: Django 1.8

Taskplaner: Sellerie (RabbitMQ-bigwig für Makler url)

Jetzt, wenn heroku es ausführen, gibt mir der Sellerie nicht die Ou tput. Auf Heroku drücken Sie es zeigt Collectstatic Konfigurationsfehler. Ich habe versucht, whitenoise Paket

auch versucht, mit der Ausführung: Heroku laufen Python manage.py collectstatic --dry geführte --noinput immer noch die gleichen Fehler.

$ heroku Python ausführen manage.py collectstatic --noinput gab die folgenden Details des Fehlers.

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 

Ich habe auch versucht, zur vorherige Arbeits Heroku begeht rückgängig zu machen begehen und geklont, dass Code, sondern auf den nächsten commit (Änderungen: ein Medienbild aus dem Medienordner entfernt) sein wieder den gleichen Fehler zeigt.

Vielen Dank im Voraus

Antwort

101

Du über this issue kommen, den 2.7.11 Python betrifft (Kombu von Sellerie erforderlich).

Das Problem ist in Kombu 3.0.30 behoben.

+1

Die neueste Version von Kombu sollte standardmäßig verwendet werden, aber ich hatte 'Kombu == 3.0.20' in meiner Anforderungsdatei. –

+3

Leider Version 3.0.30 bricht die Abwärtskompatibilität mit Django <1.7. – Cerin

+0

@Cerin Sie sollten nicht wirklich Django <1.8 verwenden, da Sie Sicherheits-Updates verpassen. Django 1.6 ist seit April 2015 nicht mehr verfügbar und Django 1.4 LTS ist seit Oktober 2015 nicht mehr verfügbar. Wenn du nicht auf Kombu 3.0.30 upgraden kannst, bewirb dich [das Update] (https://github.com/ Sellerie/Kombu/Commit/3f13d9797bc1234e51de98f30e94f511cc21390f # diff-1e972757630e9bd21c157a3e4fdf2e2cL19) zu einer früheren Version, oder verwenden Sie den Hack, die mrooney in ihrer Antwort schlägt. – Alasdair

2

Ja, das Problem, das Alasdair erwähnte, war für den Fehler verantwortlich. Ich löste das Problem in meinem Projekt, indem ich folgte, um nur die wesentlichen Anforderungen-zu-freeze.txt zu behalten, wo ich Sellerie aufliste, aber nicht seine Abhängigkeiten wie Kombu.

Dann ist es genug, um die wesentlichen Pakete zu aktualisieren und dann die vollständige Liste der Abhängigkeiten mit der funktionierenden Kombu-Version wieder einzufrieren.

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

und Test Dinge um sicherzustellen, dass die Aktualisierung nicht etwas anderes brechen hat;)

+0

Welche Vorteile hat die Verwendung von 'requirements-to-freeze.txt' gegenüber' install_requires' in 'setup.py'? – Sean

+0

Ich denke, es ist vielleicht möglich, eine setup.py-Datei zu verwenden. Ich verpacke jedoch meistens keine Apps - ich benutze nur Anforderungsdateien, da Heroku mit ihnen arbeitet. – metakermit

38

Während Kombu Upgrade die ideale Wahl ist, wenn Sie mit älteren Abhängigkeiten stecken geblieben sind, die dies nicht zulassen, dies an der Spitze meiner settings.py Platzierung für mich gearbeitet:

import uuid 
uuid._uuid_generate_random = None 

das funktioniert, weil _uuid_generate_random here wurde entfernt, und dies stellt lediglich den Standardwert. Dieser Hack scheint vernünftig, da Kombu dies nur auf work around a bug resolved in 2007 überprüft, und wenn Sie dieses Update wegen eines aktuellen Python-Updates benötigen, sind Sie inhärent nicht betroffen :)

+2

Dies ist eine echte Zeitersparnis. Bevor ich ein altes System aktualisiere, muss ich es zur Arbeit bringen ... – zmbq

Verwandte Themen