我正在将一个Django应用程序从modWSGI转换为Gunicorn / NGINX。我有一些django代码,我从modwsgi文件运行,以确保它在服务器启动时运行。我正在试图弄清楚如何在Gunicorn创业公司上工作。
免责声明 - 我想要访问的代码是一个穷人的缓存,它处理来自数据库的数据并将其存储为对我稍后在Django应用程序中执行的许多操作都很友好的格式。 与使用缓存解决方案相比,此问题与此方法的优点无关。
这是我在mod-WSGI中运行的代码很好:
sys.path.append('/src/accx/navigation')
from navigation.views import rebuild_cache_all
rebuild_cache_all()
其中'accx'是Django项目,'navigation'是Django应用程序。
现在,我正试图用Gunicorn做同样的事情。
def when_ready(server):
from navigation.views import rebuild_cache_all
rebuild_cache_all()
我也尝试在此代码的各个地方附加到sys.path,但无论我做什么,我都会收到以下错误:
ImportError: No module named navigation.views
我错过了一些明显的东西吗?我是以错误的方式解决这个问题吗?任何和所有指导表示赞赏!
............. ANSWER .............
在输入上述问题之后,我正在通过其他一些枪支问题进行阅读,这些问题与我的问题“相关”,但在我的搜索中没有显示出来。虽然这样做,我想出了我的问题。
尾随斜线!
尝试添加到gunicorn中的sys.path时,我没有使用过。一旦我解决了这个问题,gunicorn就开始抱怨它失去了它的Django_settings_module,所以我最终也不得不提供它。
以下是我现有的工作:
import sys,os
if not '/src/accx-venv/' in sys.path:
sys.path.insert(0,'/src/accx-venv/')
os.environ["DJANGO_SETTINGS_MODULE"] = "accx.settings"
def when_ready(server):
if not '/src/accx-venv/accx/' in sys.path:
sys.path.insert(0,'/src/accx-venv/accx/')
from navigation.views import rebuild_cache_all
rebuild_cache_all()
可能还有另一种更清洁的方式,但这让我工作。