Django CKEditor:部署到 Heroku 时出现 ModuleNotFoundError

Django CKEditor: ModuleNotFoundError when deploying to Heroku

我在将 Django 应用程序部署到 Heroku 时在日志中收到错误,但仅在使用 django-ckeditor 包时出现。 CKEditor 在本地运行得很好,早期版本的应用程序在本地和 Heroku without CKEditor 上都可以正常工作,所以我知道这就是问题所在。我已经回溯了我的步骤,无法弄清楚我哪里出错了。这是我的后续日志...

Heroku 日志

2018-12-10T03:03:16.513649+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
2018-12-10T03:03:16.513651+00:00 app[web.1]: return self.load_wsgiapp()
2018-12-10T03:03:16.513652+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2018-12-10T03:03:16.513654+00:00 app[web.1]: return util.import_app(self.app_uri)
2018-12-10T03:03:16.513656+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
2018-12-10T03:03:16.513657+00:00 app[web.1]: __import__(module)
2018-12-10T03:03:16.513659+00:00 app[web.1]: File "/app/JayNautic/wsgi.py", line 16, in <module>
2018-12-10T03:03:16.513660+00:00 app[web.1]: application = get_wsgi_application()
2018-12-10T03:03:16.513662+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
2018-12-10T03:03:16.513664+00:00 app[web.1]: django.setup(set_prefix=False)
2018-12-10T03:03:16.513665+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
2018-12-10T03:03:16.513667+00:00 app[web.1]: apps.populate(settings.INSTALLED_APPS)
2018-12-10T03:03:16.513669+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/django/apps/registry.py", line 89, in populate
2018-12-10T03:03:16.513670+00:00 app[web.1]: app_config = AppConfig.create(entry)
2018-12-10T03:03:16.513672+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
2018-12-10T03:03:16.513674+00:00 app[web.1]: module = import_module(entry)
2018-12-10T03:03:16.513675+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/importlib/__init__.py", line 127, in import_module
2018-12-10T03:03:16.513677+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2018-12-10T03:03:16.513718+00:00 app[web.1]: ModuleNotFoundError: No module named 'ckeditor'
2018-12-10T03:03:16.514092+00:00 app[web.1]: [2018-12-10 03:03:16 +0000] [10] [INFO] Worker exiting (pid: 10)
2018-12-10T03:03:16.517239+00:00 app[web.1]:
2018-12-10T03:03:16.518081+00:00 app[web.1]: [2018-12-10 03:03:16 +0000] [11] [INFO] Worker exiting (pid: 11)
2018-12-10T03:03:16.715563+00:00 app[web.1]: [2018-12-10 03:03:16 +0000] [4] [INFO] Shutting down: Master
2018-12-10T03:03:16.715764+00:00 app[web.1]: [2018-12-10 03:03:16 +0000] [4] [INFO] Reason: Worker failed to boot.
2018-12-10T03:03:16.809999+00:00 heroku[web.1]: Process exited with status 3
2018-12-10T03:03:16.828149+00:00 heroku[web.1]: State changed from up to crashed
2018-12-10T03:03:17.686112+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=my-app.herokuapp.com request_id=7d25a9e7-76a0-4fd0-95c1-ecf0c01aa593 fwd="71.76.74.217" dyno=web.1 connect=5001ms service= status=503 bytes= protocol=https

我已经按照说明安装了django-ckeditor。 pip install django-ckeditor

然后我将其包含在 settings.py 文件的包含应用程序中,并添加了适当的静态字段。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'articles',
    'ckeditor',
]...
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')


STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'assets'),
)

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

CKEDITOR_BASEPATH = "/static/ckeditor/ckeditor"

CKEDITOR_UPLOAD_PATH = "uploads/"
CKEDITOR_RESTRICT_BY_USER = True

CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': 'Advanced',
        'width': 758,
        'height': 300,
    },
}

将其导入到我的模型文件中,然后在必要时添加了富文本字段。

models.py

from ckeditor.fields import RichTextField...

class Article(models.Model):
  title = models.CharField(max_length=100)
  slug = models.SlugField()
  body = RichTextField()

最后我添加了正确的'|安全'到模板中的必要字段。

article_detail.html

<p>{{article.body | safe}}</p>

如果有帮助,这是我的 requirements.txt 文件。

astroid==2.1.0
colorama==0.4.1
Django==2.1.4
django-ckeditor==5.6.1
django-js-asset==1.1.0
isort==4.3.4
lazy-object-proxy==1.3.1
mccabe==0.6.1
Pillow==5.3.0
pylint==2.2.2
pytz==2018.7
six==1.11.0
whitenoise==4.1.2
wrapt==1.10.11
gunicorn==19.9.0

而我的运行时文件是 python-3.7.1,heroku 接受它。

我也 运行 python manage.py collectstatic 经过这一切,它在我的本地服务器上完美运行。我搜索了这个站点,发现的每个答案都与我没有使用的 CKEditorFileUploader 有关。我将非常感谢任何能帮助我解决这个问题的人,因为这是我完成这个网站所需要的最后一部分。

您必须将 'ckeditor_uploader' 添加到 INSTALLED_APPS