2016-04-19 8 views
0

Ich habe ein Herango-Django-Projekt implementiert, aber ich habe ein Problem: Es gibt ein Paket im virtualenv-Ordner, das einen Fehler meldet.
Dies ist die ZurückverfolgungsVirtualenv-Paketproblem bei Heroku-Bereitstellung (Django-App)

Environment: 


Request Method: POST 
Request URL: https://pin-a-voyage.herokuapp.com/login/ 

Django Version: 1.8 
Python Version: 2.7.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'blog', 
'custom_user', 
'django_markdown', 
'parsley') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware', 
'whitenoise.middleware.WhiteNoiseMiddleware') 


Traceback: 
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/app/blog/views.py" in login 
    147.     auth_login(request, user) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in login 
    117.  user_logged_in.send(sender=user.__class__, request=request, user=user) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/dispatch/dispatcher.py" in send 
    201.    response = receiver(signal=self, sender=sender, **named) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/auth/models.py" in update_last_login 
    26.  user.save(update_fields=['last_login']) 
File "/app/custom_user/models.py" in save 
    62.    new_image = resizeimage.resize_width(pil_image_obj, 300) 
File "/app/.heroku/python/lib/python2.7/site-packages/resizeimage/resizeimage.py" in wrapper 
    31.     validator(image, size) 
File "/app/.heroku/python/lib/python2.7/site-packages/resizeimage/resizeimage.py" in _width_is_big_enough 
    47.   raise ImageSizeError(image.size[0], width) 

Exception Type: ImageSizeError at /login/ 
Exception Value: 'Image is too small, Image size : 300, Required size : 300' 

Auf den Punkt gebracht: Ich habe ein Profilbild hochladen, aber ich laufe in diesen Fehler, weil ich das Paket auf dem virtualenv Ordner geändert haben, aber die virtualenv Ordner nicht gedrückt wird, Heroku.

Da der Ordner virtualenv bei der Bereitstellung in Heroku in .gitignore eingefügt werden muss (oder?), Wie kann ich dieses Problem vermeiden?

+0

Sie sollten keine Paketdateien bearbeiten, diese werden nicht zu Ihrem Heroku Repo geschoben werden. – ahmed

+0

Ok, aber was, wenn ich eine bearbeiten musste, um einige Funktionalitäten zu ändern? Gibt es einen anderen Weg? –

Antwort

0

Wenn Sie lokale Änderungen an einem Paket vornehmen müssen (statt eine neue Version beizutragen), sollten Sie dieses Paket in Ihr Django-Projekt kopieren und es so verwenden, als hätten Sie es selbst geschrieben. I.e. Als reguläre Django App in deinem Projekt.

0

In den meisten Fällen sollte man Dateien in einer virtuellen Umgebung nicht bearbeiten. Dies ist weil virtual environment holds packages installed with pip only in the local system. Der Entwickler kann jedoch den Code der installierten App bearbeiten, wenn die Anforderung nicht mit den Optionen/Attributen des Pakets erfüllt werden kann.

Sie können angepassten Code Ihrer installierten App pushen und ihn in Ihrer Produktionsumgebung verwenden, indem Sie overriding file with custom code verwenden. Ein Beispiel finden Sie in reusable apps.

Zuerst make sure updated requirements.txt is pushed to your production environment. Von der Stack-Trace /site-packages/resizeimage/ verursacht Sie Probleme. Wenn Sie PIL update requirements.txt verwenden, um pil hinzuzufügen und PIL auch in Ihrem heroku-Server zu installieren.

dann überschreiben Sie die notwendigen Dateien Ihres Pakets. Dazu erstellen Sie ein Verzeichnis mit dem gleichen Namen wie das Pip-Paket und erstellen dann eine Datei mit dem gleichen Namen wie das zu bearbeitende Paket. Danach drücke dieses Verzeichnis.