2015-12-10 17 views
51

Sto lavorando a un progetto che esegue la scansione della posta in arrivo dell'utente gmail e fornisce un rapporto. Ho schierato in Heroku con i seguenti specifiche:Impossibile importare il nome _uuid_generate_random in heroku django

Lingua: Python 2,7

quadro: Django 1,8

Utilità di pianificazione: sedano (RabbitMQ-pezzo grosso per mediatore url)

Ora, quando heroku lo esegue, il sedano non mi sta dando tput. Su Heroku spingere la sua visualizzazione Errore di configurazione di Collectstatic. Ho provato con il pacchetto Whitenoise

provato anche l'esecuzione di: Heroku run pitone manage.py collectstatic --dry conduzione --noinput Ancora ottenere lo stesso errore.

$ heroku run python manage.py collectstatic --noinput ha fornito i seguenti dettagli dell'errore.

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 

Ho anche cercato di ritirare heroku impegnarsi a lavorare commit precedente e clonato quel codice, ma prossimo commit (variazioni: rimosso un'immagine supporto dalla cartella media) suo mostrando di nuovo lo stesso errore.

Grazie in anticipo

risposta

101

Tu vieni attraverso this issue, che colpisce Python 2.7.11 (Kombu è richiesto dal sedano).

Il problema è stato risolto in Kombu 3.0.30.

+1

L'ultima versione di Kombu dovrebbe essere usata di default, ma io avevo 'kombu == 3.0.20' nel mio file dei requisiti. –

+3

Sfortunatamente, la versione 3.0.30 rompe la compatibilità all'indietro con Django <1.7. – Cerin

+0

@Ceramente non dovresti usare Django <1.8, dato che ti stai perdendo delle correzioni di sicurezza. Django 1.6 è scomparso dall'aprile 2015 e Django 1.4 LTS è stato ritirato dalla fine di ottobre 2015. Se non è possibile eseguire l'aggiornamento a kombu 3.0.30, si applica [la correzione] (https://github.com/ celery/kombu/commit/3f13d9797bc1234e51de98f30e94f511cc21390f # diff-1e972757630e9bd21c157a3e4fdf2e2cL19) a una versione precedente, o usare l'hack che mrooney suggerisce nella loro risposta. – Alasdair

2

Sì, il problema menzionato da Alasdair era responsabile dell'errore. Ho risolto il problema nel mio progetto seguendo lo this workflow per mantenere solo l'essenziale requisiti-to-freeze.txt dove elenco Celery, ma non le sue dipendenze come Kombu.

Quindi, è sufficiente aggiornare i pacchetti essenziali e quindi ri-congelare l'elenco completo delle dipendenze con la versione di Kombu funzionante.

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

e testare le cose per assicurarsi che l'aggiornamento non rompere qualcosa d'altro;)

+0

Quali sono i vantaggi dell'utilizzo di 'requisiti-to-freeze.txt' su' install_requires' in 'setup.py'? – Sean

+0

Suppongo che sia possibile utilizzare anche un file setup.py. Per lo più non faccio pacchetti di app, però - utilizzo solo i file dei requisiti da quando Heroku lavora con loro. – metakermit

38

Durante l'aggiornamento kombu è l'opzione ideale, se si è bloccato con le dipendenze più anziani che non consentono per questo, ponendo questo in cima alla mia settings.py ha lavorato per me:

import uuid 
uuid._uuid_generate_random = None 

questo funziona perché è stato rimosso _uuid_generate_random here, e questo restituisce semplicemente il valore di default. Questo hack sembra ragionevole visto che Kombu lo controlla solo a work around a bug resolved in 2007, e se hai bisogno di questa correzione a causa di un recente aggiornamento Python, non ne viene influenzato nessuno :)

+2

Questo è un risparmio di tempo reale. Prima di aggiornare un vecchio sistema, ho bisogno di farlo funzionare ... – zmbq

Problemi correlati