2013-05-07 43 views
35

我是新来的heroku和gunicorn,所以我不知道这是如何工作的。但我已经做了一些搜索,我想我已经接近部署我的Django应用程序(1.5.1)。所以我知道我需要一个Procfile具有如何修改Procfile在Heroku的非标准文件夹中运行Gunicorn进程?

web: gunicorn app.wsgi 

因为我的目录是有点不同。我不能在根目录

app_project 
    requirements/ 
    contributors/ 
    app/ 
     app/ 
      settings/ 
      wsgi.py 
     # Normally Procfile goes here 
    Procfile 

通常应用程序/是根目录下运行gunicorn,但我还是决定组织我的文件夹,这样我的Django应用程序从一些其他的东西分开。由于我必须将Procfile放入heroku的根目录才能识别它,我应该在Procfile中放入什么和/或应该在gunicorn命令中放置什么参数?

注:

web: gunicorn app.wsgi # won't work because Procfile is in a directory above 
         # I also want to keep the directories as is 
         # I also don't want to create a secondary git inside the app folder just for heroku 
web: gunicorn app.app.wsgi # won't work because I don't want to convert the folder into a python module 
+0

我m好奇......为什么你不想将__init__.py文件添加到顶级应用程序/文件夹? – eikonomega 2013-05-08 00:22:03

+0

我试图将\ _ \ _ init \ _ \ _。py添加到相同项目布局的顶级目录中,但它不能解决所有错误。即使你通过项目导入错误,然后有设置导入错误,因为它们不在python路径。所以格雷厄姆的解决方案可能是最好的。 – 2014-10-27 13:25:35

回答

3

我做了一个丑陋的黑客获得此工作。所以我要发布我的答案,但我希望你们能想出更好的解决方案

Procfile

web: sh ./app/run.sh 

app_project /应用/ run.sh

#!/bin/bash 

cd app 
gunicorn app.wsgi 
43

尝试:

web: gunicorn --pythonpath app app.wsgi 
+1

我刚刚花了半个小时寻找解决方法。谢谢! – 2014-05-03 17:28:30

+1

@ansimionescu自称幸运! :) – martynas 2014-12-28 16:15:21

+0

另一个救了我一天的家伙! <3 – 2016-08-10 14:18:49

31

As @Graham Dumpleton在他的回答中指出,OP的问题可以通过修改他的Procfile到f ollowing:

web: gunicorn --pythonpath app app.wsgi

为什么这个工程:

  • 记住,该Procfile简单地使用Heroku的启动过程。在这种情况下,gunicorn进程。
  • Gunicorn的--pythonpath参数允许您动态地将目录附加到Python运行时搜索模块查找的目录列表。
  • 通过在gunicorn命令中加入--pythonpath app,解释器基本上被告知'看到名为app的程序包(也称为app)的app目录内部,其中包含一个名为wsgi的模块。`

在OP的问题的文件夹的通用名称可以掩盖的命令的语法,主要内容如下: gunicorn --pythonpath <directory_containing_package> <package>.<module>

更多信息:
Gunicorn Documentation

+0

对每个不同论点的优秀解释 – kas 2017-08-06 06:21:12