关于Heroku部署的Virtualenv包问题(Django app)

时间:2016-04-19 13:43:18

标签: django heroku deployment virtualenv

我已经向Heroku部署了一个Django项目,但我遇到了一个问题:有一个包,它位于virtualenv文件夹中,这给了我一个错误。
这是追溯

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'

简而言之:我上传了个人资料照片,但是我遇到了这个错误,因为我修改了virtualenv文件夹中的软件包,但是virtualenv文件夹没有被推送到Heroku。

由于virtualenv文件夹在部署到Heroku时必须放入.gitignore(不是吗?),我该如何避免这个问题?

2 个答案:

答案 0 :(得分:0)

如果您需要对软件包进行本地编辑(但考虑提供或分配新版本),那么您可能希望将该软件包复制到Django项目中并使用它,就像您自己编写它一样。即作为项目中的常规Django应用程序。

答案 1 :(得分:0)

在大多数情况下,不应编辑虚拟环境中的文件。这是因为virtual environment holds packages installed with pip only in the local system。但是,如果无法通过使用随包提供的选项/属性来实现要求,开发人员可以编辑已安装应用程序的代码。

您可以推送已安装应用的自定义代码,并可以使用overriding file with custom code在生产环境中使用它。有关示例,请参阅reusable apps

首先make sure updated requirements.txt is pushed to your production environment。从堆栈跟踪/site-packages/resizeimage/导致问题。如果您正在使用PIL更新requirements.txt来包含pil并在您的heroku服务器中安装PIL。

然后覆盖包的必要文件。为此,您可以创建一个与pip包同名的目录,然后创建一个与您必须编辑的文件名相同的文件。在此之后推送此目录。