Heroku Python/Django 应用同时开发引发 ImportError

10 投票
4 回答
821 浏览
提问于 2025-04-18 08:29

今天我在Heroku上的所有Python/Django应用都停止工作了。

它们的日志显示出同样的问题。当我尝试重启或构建时,错误日志如下所示。

我已经尝试在新的本地虚拟环境中重建这些项目,它们在本地运行得很好。但是,当我把它们推送到Heroku时,就遇到了这个ImportError,并且拒绝部署。

同样,当我尝试重启现有的应用时,我看到在实例崩溃之前记录了相同的错误。

如果需要我提供其他信息,请告诉我。

错误日志:

2014-06-03T22:30:05.293788+00:00 heroku[web.1]: State changed from crashed to starting
2014-06-03T22:30:11.509350+00:00 app[web.1]: Traceback (most recent call last):
2014-06-03T22:30:11.509438+00:00 app[web.1]:   File "bluewaterads/manage.py", line 22, in <module>
2014-06-03T22:30:11.509536+00:00 app[web.1]:     from django.core.management import execute_manager
2014-06-03T22:30:11.509589+00:00 app[web.1]:   File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 8, in <module>
2014-06-03T22:30:11.509644+00:00 app[web.1]:     from django.core.management.base import BaseCommand, CommandError, handle_default_options
2014-06-03T22:30:11.509667+00:00 app[web.1]:   File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 16, in <module>
2014-06-03T22:30:11.509707+00:00 app[web.1]:     from django.utils.encoding import smart_str
2014-06-03T22:30:11.509727+00:00 app[web.1]:   File "/app/.heroku/venv/lib/python2.7/site-packages/django/utils/encoding.py", line 2, in <module>
2014-06-03T22:30:11.509796+00:00 app[web.1]:     import urllib
2014-06-03T22:30:11.509824+00:00 app[web.1]:   File "/usr/local/lib/python2.7/urllib.py", line 26, in <module>
2014-06-03T22:30:11.509869+00:00 app[web.1]:     import socket
2014-06-03T22:30:11.509886+00:00 app[web.1]:   File "/usr/local/lib/python2.7/socket.py", line 47, in <module>
2014-06-03T22:30:11.509919+00:00 app[web.1]:     import _socket
2014-06-03T22:30:11.509954+00:00 app[web.1]: ImportError: /app/.heroku/venv/lib/python2.7/lib-dynload/_socket.so: undefined symbol: _PyInt_AsInt
2014-06-03T22:30:13.014774+00:00 heroku[web.1]: State changed from starting to crashed
2014-06-03T22:30:10.241602+00:00 heroku[web.1]: Starting process with command `python bluewaterads/manage.py run_gunicorn 0.0.0.0:33709 -w 4`
2014-06-03T22:30:13.015823+00:00 heroku[web.1]: Process exited with status 1

Requirements.txt:

Django==1.4.1
Mezzanine==1.2.4.1
Pillow==1.7.7
South==0.7.6
bleach==1.1.5
boto==2.5.2
dj-database-url==0.2.1
django-appconf==0.5
django-compressor==1.2
django-s3-storages-utils==0.1.0
django-storages==1.1.5
filebrowser-safe==0.2.11
grappelli-safe==0.2.9
gunicorn==0.14.6
html5lib==0.95
psycopg2==2.4.5
pytz==2012d

Procfile:

web: python bluewaterads/manage.py run_gunicorn 0.0.0.0:$PORT -w 4

4 个回答

0

我在我的Heroku应用上也遇到了同样的问题,尝试了很多方法后,最后通过升级所有的包,包括Django,按照Django和Heroku的教程添加了wsgi.py文件,并把我的procfile改成了这个:

web: gunicorn app.wsgi --pythonpath app --log-file - 

这里的pythonpath设置很重要,因为我之前遇到了很多导入错误和内部服务器错误,原因是gunicorn找不到我应用的正确路径。

1

你是在用默认的Python构建包吗?Heroku正在更新它的系统镜像,特别是如果你没有使用最新的构建包,可能会出现不兼容的问题。

要检查你是否在使用默认的构建包,可以运行以下命令:

$ heroku config | grep BUILDPACK_URL

如果你觉得这可能是问题的原因,请联系Heroku的支持团队。

3

在你部署应用的时候,如果运行时没有使用更新后的 python-2.7.7,

可以尝试清除一下仓库的缓存。

首先安装这个工具: heroku plugins:install https://github.com/heroku/heroku-repo.git

然后运行这个命令: heroku repo:purge_cache -a appname

接着再部署你的应用。

更多信息可以查看这里: Heroku-repo

3

在你的项目根目录下添加一个 runtime.txt 文件,里面写上 python-2.7.7,然后重新部署一下。

Heroku 刚刚把运行环境更新到了 python-2.7.7。这个文章昨天也更新过:https://devcenter.heroku.com/articles/python-runtimes

[编辑]: 这样做会强制 Heroku 从头开始重建虚拟环境。你可以指定任何运行环境。

撰写回答