使用Heroku的Django部署

使用Heroku的Django部署,django,heroku,Django,Heroku,我正在尝试使用heroku部署我现有的django项目,遵循heroku提供的演练,并根据需要进行调整,以适合我的项目。让我们快速回顾一下我到目前为止所做的工作: 在my virtualenv中安装了django工具带 在名为Procile的项目根目录中创建了一个profile,其中包括: web: gunicorn projectname.wsgi 使用foreman start确认我的项目仍然在本地正常运行 使用pipfreeze创建requirements.txt,并将其放置在我的项

我正在尝试使用heroku部署我现有的django项目,遵循heroku提供的演练,并根据需要进行调整,以适合我的项目。让我们快速回顾一下我到目前为止所做的工作:

  • 在my virtualenv中安装了django工具带
  • 在名为
    Procile
    的项目根目录中创建了一个profile,其中包括:

    web: gunicorn projectname.wsgi
    
  • 使用
    foreman start
    确认我的项目仍然在本地正常运行

  • 使用
    pipfreeze
    创建
    requirements.txt
    ,并将其放置在我的项目根目录中
  • 将以下内容添加到
    settings.py

    import dj_database_url
    DATABASES['default'] =  dj_database_url.config()
    
    # Honor the 'X-Forwarded-Proto' header for request.is_secure()
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    
    # Allow all host headers
    ALLOWED_HOSTS = ['*']
    
    # Static asset configuration
    import os
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = 'staticfiles'
    STATIC_URL = '/static/'
    
     STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'static'),
    )
    
这是我有点困惑的一点,演练没有提到我现有的数据库设置会发生什么,保持原样,删除,更改

  • 在wsgi.py中添加了以下内容:

    from django.core.wsgi import get_wsgi_application
    from dj_static import Cling
    
    application = Cling(get_wsgi_application())
    
  • 将heroku添加为git remote,并将我的项目推送到heroku。成功了

  • heroku ps:scale web=1
然而,当我试图访问我的项目时,我得到一个
应用程序错误
。当我用heroku
heroku ps--app projectname
检查状态时,显示dyno已经崩溃。重新启动没有任何作用

heroku日志--app projectname产生:

2013-07-18T00:01:14.246956+00:00 heroku[web.1]: Starting process with command `gunicorn projectname.wsgi`
2013-07-18T00:01:16.054952+00:00 app[web.1]: 2013-07-18 00:01:16 [2] [INFO] Starting gunicorn 17.5
2013-07-18T00:01:16.058972+00:00 app[web.1]: 2013-07-18 00:01:16 [2] [INFO] Listening at: http://0.0.0.0:55131 (2)
2013-07-18T00:01:16.061566+00:00 app[web.1]: 2013-07-18 00:01:16 [2] [INFO] Using worker: sync
2013-07-18T00:01:16.080073+00:00 app[web.1]: 2013-07-18 00:01:16 [7] [INFO] Booting worker with pid: 7
2013-07-18T00:01:16.091347+00:00 app[web.1]: Traceback (most recent call last):
2013-07-18T00:01:16.091347+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 473, in spawn_worker
2013-07-18T00:01:16.091347+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
2013-07-18T00:01:16.091347+00:00 app[web.1]:     worker.init_process()
2013-07-18T00:01:16.091347+00:00 app[web.1]:     self.wsgi = self.app.wsgi()
2013-07-18T00:01:16.091347+00:00 app[web.1]:     self.callable = self.load()
2013-07-18T00:01:16.091558+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/util.py", line 353, in import_app
2013-07-18T00:01:16.091347+00:00 app[web.1]:     return util.import_app(self.app_uri)
2013-07-18T00:01:16.091558+00:00 app[web.1]:     __import__(module)
2013-07-18T00:01:16.091347+00:00 app[web.1]: 2013-07-18 00:01:16 [7] [ERROR] Exception in  worker process:
2013-07-18T00:01:16.091347+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 33, in load
2013-07-18T00:01:16.091558+00:00 app[web.1]: Traceback (most recent call last):
2013-07-18T00:01:16.091771+00:00 app[web.1]:     return util.import_app(self.app_uri)
2013-07-18T00:01:16.091771+00:00 app[web.1]:     __import__(module)
2013-07-18T00:01:16.091558+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
2013-07-18T00:01:16.091558+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/base.py", line 115, in wsgi
2013-07-18T00:01:16.091771+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 33, in load
2013-07-18T00:01:16.091347+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/base.py", line 115, in wsgi
2013-07-18T00:01:16.091558+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 473, in spawn_worker
2013-07-18T00:01:16.091558+00:00 app[web.1]:     self.callable = self.load()
2013-07-18T00:01:16.091771+00:00 app[web.1]: ImportError: No module named projectname.wsgi
2013-07-18T00:01:16.091558+00:00 app[web.1]: ImportError: No module named projectname.wsgi
2013-07-18T00:01:16.091558+00:00 app[web.1]:     self.wsgi = self.app.wsgi()
2013-07-18T00:01:16.091558+00:00 app[web.1]:     worker.init_process()
2013-07-18T00:01:16.099257+00:00 app[web.1]: 2013-07-18 00:01:16 [7] [INFO] Worker exiting (pid: 7)
2013-07-18T00:01:16.091771+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/util.py", line 353, in import_app
2013-07-18T00:01:16.286985+00:00 app[web.1]: 2013-07-18 00:01:16 [2] [INFO] Shutting down: Master
2013-07-18T00:01:16.288144+00:00 app[web.1]: 2013-07-18 00:01:16 [2] [INFO] Reason: Worker failed to boot.
2013-07-18T00:01:17.956769+00:00 heroku[web.1]: Process exited with status 3
2013-07-18T00:01:17.981029+00:00 heroku[web.1]: State changed from starting to crashed
2013-07-18T00:11:46.404151+00:00 heroku[web.1]: State changed from crashed to starting
2013-07-18T00:11:50.427658+00:00 heroku[web.1]: Starting process with command `gunicorn projectname.wsgi`
2013-07-18T00:11:51.405718+00:00 app[web.1]: 2013-07-18 00:11:51 [2] [INFO] Starting gunicorn 17.5
2013-07-18T00:11:51.406995+00:00 app[web.1]: 2013-07-18 00:11:51 [2] [INFO] Listening at: http://0.0.0.0:21344 (2)
2013-07-18T00:11:51.407226+00:00 app[web.1]: 2013-07-18 00:11:51 [2] [INFO] Using worker: sync
2013-07-18T00:11:51.418300+00:00 app[web.1]: 2013-07-18 00:11:51 [7] [INFO] Booting worker with pid: 7
2013-07-18T00:11:51.425145+00:00 app[web.1]: Traceback (most recent call last):
2013-07-18T00:11:51.425145+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 33, in load
2013-07-18T00:11:51.425145+00:00 app[web.1]: 2013-07-18 00:11:51 [7] [ERROR] Exception in worker process:
2013-07-18T00:11:51.425145+00:00 app[web.1]:     self.callable = self.load()
2013-07-18T00:11:51.425145+00:00 app[web.1]:     worker.init_process()
2013-07-18T00:11:51.425145+00:00 app[web.1]:     self.wsgi = self.app.wsgi()
2013-07-18T00:11:51.425145+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/base.py", line 115, in wsgi
2013-07-18T00:11:51.425145+00:00 app[web.1]:     return util.import_app(self.app_uri)
2013-07-18T00:11:51.425145+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 473, in spawn_worker
2013-07-18T00:11:51.425145+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
2013-07-18T00:11:51.425341+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/util.py", line 353, in import_app
2013-07-18T00:11:51.425341+00:00 app[web.1]:     __import__(module)
2013-07-18T00:11:51.425341+00:00 app[web.1]: ImportError: No module named projectname.wsgi
2013-07-18T00:11:51.425341+00:00 app[web.1]: Traceback (most recent call last):
2013-07-18T00:11:51.425341+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 473, in spawn_worker
2013-07-18T00:11:51.425341+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
2013-07-18T00:11:51.425341+00:00 app[web.1]:     self.callable = self.load()
2013-07-18T00:11:51.425341+00:00 app[web.1]:     worker.init_process()
2013-07-18T00:11:51.425341+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/base.py", line 115, in wsgi
2013-07-18T00:11:51.425341+00:00 app[web.1]:     self.wsgi = self.app.wsgi()
2013-07-18T00:11:51.425513+00:00 app[web.1]:     return util.import_app(self.app_uri)
2013-07-18T00:11:51.425513+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 33, in load
2013-07-18T00:11:51.425513+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/util.py", line 353, in import_app
2013-07-18T00:11:51.425513+00:00 app[web.1]:     __import__(module)
2013-07-18T00:11:51.425513+00:00 app[web.1]: ImportError: No module named projectname.wsgi
2013-07-18T00:11:51.425868+00:00 app[web.1]: 2013-07-18 00:11:51 [7] [INFO] Worker exiting (pid: 7)
2013-07-18T00:11:51.550395+00:00 app[web.1]: 2013-07-18 00:11:51 [2] [INFO] Shutting down: Master
2013-07-18T00:11:51.550395+00:00 app[web.1]: 2013-07-18 00:11:51 [2] [INFO] Reason: Worker failed to boot.
2013-07-18T00:11:52.851413+00:00 heroku[web.1]: Process exited with status 3
2013-07-18T00:11:52.867339+00:00 heroku[web.1]: State changed from starting to crashed
2013-07-18T00:14:14.285978+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=projectname.herokuapp.com fwd="173.54.54.86" dyno= connect= service= status=503 bytes=
2013-07-18T00:14:14.405875+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/favicon.ico host=projectname.herokuapp.com fwd="173.54.54.86" dyno= connect= service= status=503 bytes=

如果您有任何帮助/建议,我将不胜感激,我无法就此直接与heroku联系,这里的一切都是指您。

嗯,不太确定。尽管heroku的文档推荐了您尝试过的方法。我真的不知道gunicorn在heroku的何处安装,以及它是如何导入django项目的。使用django设置访问进程/服务器的更可能的方式似乎是

web:bin/gunicorn\u django--workers=4--bind=0.0.0:$PORT-django\u-project/settings.py

根据此处的建议:

这是我有点困惑的一点,演练没有 提及我现有的数据库设置会发生什么,保持原样, 撤换

我也跟着他们的演练,遇到了同样的问题。对我来说,是DATABASES语句出错了。我用他们提供的数据库配置替换了我的数据库配置,而它必须添加到数据库设置已经创建的字典中。因此,与其替换数据库语句,不如添加:

DATABASES['default'] =  dj_database_url.config()

Heroku可能在构建过程中识别了错误的应用程序类型。这发生在我身上:

(venv)josephs-mbp:myproject josephfusaro$ git push heroku master
Fetching repository, done.
Counting objects: 27, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (14/14), 1.26 KiB | 0 bytes/s, done.
Total 14 (delta 9), reused 0 (delta 0)

-----> Node.js app detected
这让我大吃一惊,因为我正在构建一个Python/Django应用程序。我遇到了它,它解释了它是如何发生的,并展示了如何覆盖构建包。对于本例,我们将指定Python构建包,但您可以指示Heroku将构建包用于您正在构建的任何类型的应用程序()

我用过:

DATABASES = {
'default': dj_database_url.config(default='sqlite:///db.sqlite')
}

这个表单可以在本地和heroku上使用

谢谢,但是这并没有详细说明我的数据库设置会发生什么。您可以使用类似于ATABASES={'default':dj_database\u url.config(default='postgres://settings_stuff')} . 此外,您还应检查以了解连接到db的情况
DATABASES = {
'default': dj_database_url.config(default='sqlite:///db.sqlite')
}