2015-12-10 14 views
51

Tôi đang làm việc trên dự án quét hộp thư đến của người dùng gmail và cung cấp báo cáo. Tôi đã triển khai nó trong Heroku với thông số kỹ thuật sau:Không thể nhập tên _uuid_generate_random trong heroku django

Ngôn Ngữ: Python 2,7

Khung: Django 1,8

Task Scheduler: Cần tây (RabbitMQ-quan to cho môi giới url)

Bây giờ khi heroku thực hiện nó cần tây không cho tôi tput. Trên Heroku đẩy hiển thị Lỗi cấu hình thu thập. Tôi đã cố gắng sử dụng nhiễu trắng gói

Cũng đã cố gắng thực hiện: Heroku chạy python manage.py collectstatic --dry ương --noinput Tuy nhận được lỗi tương tự.

$ heroku chạy python manage.py collectstatic --noinput đã cung cấp các chi tiết sau chi tiết về lỗi này.

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 

Tôi cũng đã cố gắng để rollback Heroku cam kết làm việc trước đó cam kết và nhân bản mã mà nhưng trên cam kết tiếp theo (thay đổi: loại bỏ một hình ảnh phương tiện truyền thông từ thư mục phương tiện truyền thông) cho thấy nó các lỗi tương tự một lần nữa.

Cảm ơn trước

Trả lời

101

Bạn đang đến trên khắp this issue, ảnh hưởng Python 2.7.11 (Kombu là yêu cầu của cần tây).

Sự cố được khắc phục trong Kombu 3.0.30.

+1

Phiên bản mới nhất của Kombu nên được sử dụng theo mặc định, nhưng tôi đã 'kombu == 3.0.20' trong tập tin yêu cầu của tôi. –

+3

Thật không may, phiên bản 3.0.30 phá vỡ khả năng tương thích ngược với Django <1.7. – Cerin

+0

@Cinin bạn thực sự không nên sử dụng Django <1.8, vì bạn đang bỏ lỡ các bản sửa lỗi bảo mật. Django 1.6 đã kết thúc cuộc sống từ tháng 4 năm 2015 và Django 1.4 LTS đã kết thúc từ tháng 10 năm 2015. Nếu bạn không thể nâng cấp lên kombu 3.0.30, bạn áp dụng [sửa] (https://github.com/ cần tây/kombu/cam kết/3f13d9797bc1234e51de98f30e94f511cc21390f # diff-1e972757630e9bd21c157a3e4fdf2e2cL19) cho phiên bản cũ hơn hoặc sử dụng bản hack mà mrooney đề xuất trong câu trả lời của họ. – Alasdair

2

Có, vấn đề mà Alasdair đề cập chịu trách nhiệm về lỗi. Tôi đã giải quyết vấn đề trong dự án của mình bằng cách theo dõi this workflow để chỉ giữ các yêu cầu thiết yếu yêu cầu-to-freeze.txt nơi tôi liệt kê Celery, nhưng không phải phụ thuộc của nó như Kombu.

Sau đó, nó đủ để nâng cấp các gói thiết yếu và sau đó đóng băng lại danh sách đầy đủ các phụ thuộc với phiên bản Kombu đang hoạt động.

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

Và kiểm tra mọi thứ để đảm bảo việc nâng cấp đã không phá vỡ cái gì khác;)

+0

Lợi ích của việc sử dụng 'requirements-to-freeze.txt' trên' install_requires' trong 'setup.py' là gì? – Sean

+0

Tôi đoán có thể sử dụng tệp setup.py. Tôi hầu như không đóng gói ứng dụng, mặc dù - Tôi chỉ sử dụng các tập tin yêu cầu kể từ khi Heroku làm việc với họ. – metakermit

38

Trong khi nâng cấp kombu là lựa chọn lý tưởng, nếu bạn đang bị mắc kẹt với phụ thuộc lớn tuổi không cho phép cho điều này, đặt này ở đầu settings.py tôi làm việc cho tôi:

import uuid 
uuid._uuid_generate_random = None 

này hoạt động vì _uuid_generate_random đã được gỡ bỏ here, và điều này chỉ đơn giản là phục hồi các giá trị mặc định. Hack này có vẻ hợp lý vì Kombu chỉ kiểm tra điều này là work around a bug resolved in 2007 và nếu bạn cần sửa lỗi này vì bản cập nhật Python gần đây, bạn không bị ảnh hưởng :)

+2

Đây là chương trình tiết kiệm thời gian thực. Trước khi cập nhật một hệ thống cũ, tôi cần làm cho nó hoạt động ... – zmbq

Các vấn đề liên quan