通过 Git 将 Django 项目部署到 Heroku:"No module named.. - failure"

Deploying a Django Project through Git to Heroku: "No module named.. - failure"

我希望你能帮助我,同时,我希望这个查询将来能为这里的其他人服务。

基于出色的书籍:Eric Matthes 的 Python 速成课程,我正在尝试使用 Git 将 Django 应用程序部署到 Heroku,并且已经达到 acros有几个问题。请注意,此处对本书进行了一些更正:https://ehmatthes.github.io/pcc/updates.html

我在这里特别提到这本书,因为我认为它被评为各种网站上最好的入门书籍之一,所以我可以想象其他人面临同样的问题 - 而且,因为有几个 posts 与这 3 个主题相关。

最初,应用程序可以提交到 Git,但随后不会使用以下方法推送到 Heroku:

git push heroku master

第 1 部分: 这不断导致错误:

No Procfile and no package.json file found in Current Directory - See heroku local --help

为了解决这个问题,确保文件没有扩展名(mac os)是至关重要的文件.

第 2 部分: 正在重试,现在允许新消息:

ModuleNotFoundError: no module named 'bootstrap3"

这可以通过确保 django-bootstrap3==6.x.x 要求在 requirements.txt 文件中可用来解决,当命令:

pip freeze > requirements.txt

已发布 - 手动添加它并没有成功。 另外,我手动添加了:

appdirs==1.4.3

接下来,我按照网站上关于如何禁用静态收集的说明进行操作:

heroku config:set DISABLE_COLLECTSTATIC=1

这个组合让我更进一步。

第 3 部分 所有这一切都完成了,我现在能够成功 运行 代码:

git push heroku master

然而,运行宁:

heroku ps

紧接着,显示崩溃

web.1: crashed 2018/12/09 11:24:35 +0100 (~ 42m ago)

正在尝试使用以下命令迁移数据库:

heroku run python manage.py migrate

现在告诉我,它缺少模块:dj-database-url

ModuleNotFoundError: No module named 'dj_database_url'

查看我的 requirements.txt 文件,我清楚地在列表中找到了它。

由于网络中的主要参考是检查它是否包含在 requirements.txt 文件中,gunicorn 文件是否正确定义或 collectstatic 被禁用 - 我在 loss 和我希望有人能够帮助解决这个问题,并希望以上的建议能使其他处理同样早期问题的人受益。

我的文件如下所示:

过程文件

web: gunicorn learning_log.wsgi —-log-file -

Procfile 大写 "P" 并且应用程序名为 learning_log

requirements.txt

astroid==2.1.0
autopep8==1.4.3
dj-database-url==0.5.0
dj-static==0.0.6
Django==2.1.3
gunicorn==19.9.0
isort==4.3.4
lazy-object-proxy==1.3.1
mccabe==0.6.1
pycodestyle==2.4.0
pylint==2.2.2
pytz==2018.7
six==1.11.0
static3==0.7.0
wrapt==1.10.11
django-bootstrap3==6.2.2
psycopg2>=2.6.1
appdirs==1.4.3

wsgi.py

import os

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "learning_log.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)

从 settings.py 文件中截取:

# Settings for django-bootstrap3
BOOTSTRAP3 = {
    'include_jquery': True,
}

# Heroku Settings
cwd = os.getcwd()
print("--- CWD ---\n", cwd, "\n---\n")
if cwd == '/app' or cwd[:4] == '/tmp':
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(default='postgres://localhost')
    }

    # 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
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = 'staticfiles'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )

    STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

runtime.txt

python-3.7.0

我真诚地希望,有人可以在这里提供帮助 - 关于可能还需要什么,我有点oss。

我希望这足以解释 - 我知道 Heroku 方面显然也有一些更新,但要学习这真的很难。

非常感谢, 西蒙

好的,经过大量的测试 - 我终于意识到需求文件一直在变化(我很确定,不仅仅是在我 运行 冻结时)。

因此,以前安装的几个软件包不再位于 requirements.txt 文件中。本质上这意味着,这个错误实际上是由于 requirements.txt 文件完整并且包含所有必需的包。

我的最终包裹清单如下:

appdirs==1.4.3
astroid==2.0.4
certifi==2018.8.24
chardet==3.0.4
cycler==0.10.0
Django==2.1.1
django-bootstrap3==11.0.0
dj-database-url==0.5.0
dj-static==0.0.6
gunicorn==19.3.0
idna==2.7
isort==4.3.4
kiwisolver==1.0.1
lazy-object-proxy==1.3.1
matplotlib==2.2.2
mccabe==0.6.1
numpy==1.15.0
psycopg2>=2.6.1
pygal==2.4.0
pygal-maps-world==1.0.2
pygame==1.9.4
pylint==2.1.1
pyparsing==2.2.0
python-dateutil==2.7.3
pytz==2018.5
requests==2.19.1
six==1.11.0
static3==0.6.1
urllib3==1.23
virtualenv==16.0.0
whitenoise==4.1.2
wrapt==1.10.11