Gunicorn+Django+Heroku. Python路径问题

2 投票
1 回答
2658 浏览
提问于 2025-04-17 20:10

我正在运行一个Django应用,之前我把它顺利地部署到了Heroku上,使用的是Gunicorn。也就是说,我可以在本地运行

foreman start

并且能确认这个应用在生产环境中是否能正常工作。最近,我决定把我们项目的所有应用放到一个叫做'applications'的子文件夹里。这就意味着我需要修改我的DJANGO_SETTINGS_MODULE环境变量,还有其他一些文件。在做完这些修改后,我尝试使用foreman和gunicorn,直到本地服务器成功启动。然后我就把它部署到了生产环境。结果当然是出错了:

Running `gunicorn --workers=4 applications.rocketlistings.wsgi -b 0.0.0.0: -k gevent` attached to terminal... up, run.8052
Traceback (most recent call last):
  File "/app/.heroku/python/bin/gunicorn", line 9, in <module>
    load_entry_point('gunicorn==0.17.2', 'console_scripts', 'gunicorn')()
  File "/app/.heroku/python/lib/python2.7/site-packages/distribute-0.6.34-py2.7.egg/pkg_resources.py", line 343, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/app/.heroku/python/lib/python2.7/site-packages/distribute-0.6.34-py2.7.egg/pkg_resources.py", line 2307, in load_entry_point
    return ep.load()
  File "/app/.heroku/python/lib/python2.7/site-packages/distribute-0.6.34-py2.7.egg/pkg_resources.py", line 2013, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named app.wsgiapp

我不太确定自己哪里出错了,而且由于Heroku的远程设置比较复杂,调试起来非常困难。其他讨论这个错误的帖子提到这可能是路径的问题。这听起来很有道理,但我想不出路径哪里可能出错,因为我的应用文件夹里有一个init.py文件,而且在本地一切都正常。

这是我的生产路径/pythonpath:

Running `echo $PATH` attached to terminal... up, run.2583
/app/.heroku/python/bin:/usr/local/bin:/usr/bin:/bin

Running `echo $PYTHONPATH` attached to terminal... up, run.8026
/app/

提前谢谢你们!

1 个回答

3

有时候,当Gunicorn在PYTHONPATH中找到另一个叫做'app'的模块时,就会出现这个问题。将PYTHONPATH设置为一个假的值可以解决这个问题:

$ heroku config:set PYTHONPATH=fakepath

https://github.com/heroku/heroku-buildpack-python/wiki/Troubleshooting#no-module-named-appwsgiapp

撰写回答