简体   繁体   中英

Django app working locally but not in Heroku: MarkdownX module cannot be found

To start, I have looked at every single stack overflow question related to this. From updating requirements.txt, pipfile.lock, pipfile, adding to installed apps, etc..

The package works flawlessly locally however crashes on Heroku. From the logs it looks like it is reading the the settings.py and when it gets to "markdownx" it cannot find a module by that name. Im guessing because it is listed as "django-markdownx" in pipfile.lock, requirements.txt, and in pipfile. However when I change the name to "markdownx" in those locations it fails locally. I have spent many hours looking all online to fix this and nothing has worked so any help would be very appreciated. Below are my files.

Requirements.txt

certifi==2018.11.29
chardet==3.0.4
Django==2.1
django-markdownx==2.0.28
gunicorn==19.9.0
idna==2.8
lxml==4.3.0
Markdown==3.0.1
Pillow==5.4.1
pytz==2018.9
PyYAML==3.13
requests==2.21.0
sorl-thumbnail==12.5.0
urllib3==1.24.1

Pipfile

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
django-markdownx = "*"

[packages]
django = "==2.1"
gunicorn = "*"

[requires]
python_version = "3.7"

pipfile.lock

{
    "_meta": {
        "hash": {
            "sha256": "e45fc89d2502eac1be6bd0ea7e7189a78db18d760bb7fb386c78350de2271f88"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.7"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "django": {
            "hashes": [
                "sha256:7f246078d5a546f63c28fc03ce71f4d7a23677ce42109219c24c9ffb28416137",
                "sha256:ea50d85709708621d956187c6b61d9f9ce155007b496dd914fdb35db8d790aec"
            ],
            "index": "pypi",
            "version": "==2.1"
        },
        "gunicorn": {
            "hashes": [
                "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471",
                "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"
            ],
            "index": "pypi",
            "version": "==19.9.0"
        },
        "pytz": {
            "hashes": [
                "sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9",
                "sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c"
            ],
            "version": "==2018.9"
        }
    },
    "develop": {
        "django": {
            "hashes": [
                "sha256:7f246078d5a546f63c28fc03ce71f4d7a23677ce42109219c24c9ffb28416137",
                "sha256:ea50d85709708621d956187c6b61d9f9ce155007b496dd914fdb35db8d790aec"
            ],
            "index": "pypi",
            "version": "==2.1"
        },
        "django-markdownx": {
            "hashes": [
                "sha256:285a40ab405830c0a049e05f3dafabb2c195146f577b824913555aa62512b90d",
                "sha256:d6e706c0b1329b23d6dcaa8754e5921fa2531711dc5afeec4ed3c73a8cb6a178"
            ],
            "index": "pypi",
            "version": "==2.0.28"
        },
        "markdown": {
            "hashes": [
                "sha256:c00429bd503a47ec88d5e30a751e147dcb4c6889663cd3e2ba0afe858e009baa",
                "sha256:d02e0f9b04c500cde6637c11ad7c72671f359b87b9fe924b2383649d8841db7c"
            ],
            "version": "==3.0.1"
        },
        "pillow": {
            "hashes": [
                "sha256:051de330a06c99d6f84bcf582960487835bcae3fc99365185dc2d4f65a390c0e",
                "sha256:0ae5289948c5e0a16574750021bd8be921c27d4e3527800dc9c2c1d2abc81bf7",
                "sha256:0b1efce03619cdbf8bcc61cfae81fcda59249a469f31c6735ea59badd4a6f58a",
                "sha256:163136e09bd1d6c6c6026b0a662976e86c58b932b964f255ff384ecc8c3cefa3",
                "sha256:18e912a6ccddf28defa196bd2021fe33600cbe5da1aa2f2e2c6df15f720b73d1",
                "sha256:24ec3dea52339a610d34401d2d53d0fb3c7fd08e34b20c95d2ad3973193591f1",
                "sha256:267f8e4c0a1d7e36e97c6a604f5b03ef58e2b81c1becb4fccecddcb37e063cc7",
                "sha256:3273a28734175feebbe4d0a4cde04d4ed20f620b9b506d26f44379d3c72304e1",
                "sha256:4c678e23006798fc8b6f4cef2eaad267d53ff4c1779bd1af8725cc11b72a63f3",
                "sha256:4d4bc2e6bb6861103ea4655d6b6f67af8e5336e7216e20fff3e18ffa95d7a055",
                "sha256:505738076350a337c1740a31646e1de09a164c62c07db3b996abdc0f9d2e50cf",
                "sha256:5233664eadfa342c639b9b9977190d64ad7aca4edc51a966394d7e08e7f38a9f",
                "sha256:5d95cb9f6cced2628f3e4de7e795e98b2659dfcc7176ab4a01a8b48c2c2f488f",
                "sha256:7eda4c737637af74bac4b23aa82ea6fbb19002552be85f0b89bc27e3a762d239",
                "sha256:801ddaa69659b36abf4694fed5aa9f61d1ecf2daaa6c92541bbbbb775d97b9fe",
                "sha256:825aa6d222ce2c2b90d34a0ea31914e141a85edefc07e17342f1d2fdf121c07c",
                "sha256:9c215442ff8249d41ff58700e91ef61d74f47dfd431a50253e1a1ca9436b0697",
                "sha256:a3d90022f2202bbb14da991f26ca7a30b7e4c62bf0f8bf9825603b22d7e87494",
                "sha256:a631fd36a9823638fe700d9225f9698fb59d049c942d322d4c09544dc2115356",
                "sha256:a6523a23a205be0fe664b6b8747a5c86d55da960d9586db039eec9f5c269c0e6",
                "sha256:a756ecf9f4b9b3ed49a680a649af45a8767ad038de39e6c030919c2f443eb000",
                "sha256:b117287a5bdc81f1bac891187275ec7e829e961b8032c9e5ff38b70fd036c78f",
                "sha256:ba04f57d1715ca5ff74bb7f8a818bf929a204b3b3c2c2826d1e1cc3b1c13398c",
                "sha256:cd878195166723f30865e05d87cbaf9421614501a4bd48792c5ed28f90fd36ca",
                "sha256:cee815cc62d136e96cf76771b9d3eb58e0777ec18ea50de5cfcede8a7c429aa8",
                "sha256:d1722b7aa4b40cf93ac3c80d3edd48bf93b9208241d166a14ad8e7a20ee1d4f3",
                "sha256:d7c1c06246b05529f9984435fc4fa5a545ea26606e7f450bdbe00c153f5aeaad",
                "sha256:e9c8066249c040efdda84793a2a669076f92a301ceabe69202446abb4c5c5ef9",
                "sha256:f227d7e574d050ff3996049e086e1f18c7bd2d067ef24131e50a1d3fe5831fbc",
                "sha256:fc9a12aad714af36cf3ad0275a96a733526571e52710319855628f476dcb144e"
            ],
            "version": "==5.4.1"
        },
        "pytz": {
            "hashes": [
                "sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9",
                "sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c"
            ],
            "version": "==2018.9"
        }
    }
}

Heroku Error Logs

2019-02-21T03:50:15.022807+00:00 heroku[web.1]: State changed from crashed to starting
2019-02-21T03:50:21.557129+00:00 heroku[web.1]: Starting process with command `gunicorn lusfood.wsgi:application --log-file -`
2019-02-21T03:50:23.307739+00:00 app[web.1]: [2019-02-21 03:50:23 +0000] [4] [INFO] Starting gunicorn 19.9.0
2019-02-21T03:50:23.308372+00:00 app[web.1]: [2019-02-21 03:50:23 +0000] [4] [INFO] Listening at: http://0.0.0.0:55813 (4)
2019-02-21T03:50:23.308495+00:00 app[web.1]: [2019-02-21 03:50:23 +0000] [4] [INFO] Using worker: sync
2019-02-21T03:50:23.312130+00:00 app[web.1]: [2019-02-21 03:50:23 +0000] [10] [INFO] Booting worker with pid: 10
2019-02-21T03:50:23.399437+00:00 app[web.1]: [2019-02-21 03:50:23 +0000] [11] [INFO] Booting worker with pid: 11
2019-02-21T03:50:23.758888+00:00 heroku[web.1]: State changed from starting to up
2019-02-21T03:50:24.020060+00:00 app[web.1]: [2019-02-20 20:50:24 -0700] [10] [ERROR] Exception in worker process
2019-02-21T03:50:24.020105+00:00 app[web.1]: Traceback (most recent call last):
2019-02-21T03:50:24.020114+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2019-02-21T03:50:24.020116+00:00 app[web.1]:     worker.init_process()
2019-02-21T03:50:24.020117+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
2019-02-21T03:50:24.020119+00:00 app[web.1]:     self.load_wsgi()
2019-02-21T03:50:24.020120+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
2019-02-21T03:50:24.020122+00:00 app[web.1]:     self.wsgi = self.app.wsgi()
2019-02-21T03:50:24.020125+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
2019-02-21T03:50:24.020126+00:00 app[web.1]:     self.callable = self.load()
2019-02-21T03:50:24.020127+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
2019-02-21T03:50:24.020129+00:00 app[web.1]:     return self.load_wsgiapp()
2019-02-21T03:50:24.020130+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2019-02-21T03:50:24.020132+00:00 app[web.1]:     return util.import_app(self.app_uri)
2019-02-21T03:50:24.020133+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
2019-02-21T03:50:24.020134+00:00 app[web.1]:     __import__(module)
2019-02-21T03:50:24.020137+00:00 app[web.1]:   File "/app/lusfood/wsgi.py", line 16, in <module>
2019-02-21T03:50:24.020138+00:00 app[web.1]:     application = get_wsgi_application()
2019-02-21T03:50:24.020139+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
2019-02-21T03:50:24.020140+00:00 app[web.1]:     django.setup(set_prefix=False)
2019-02-21T03:50:24.020141+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
2019-02-21T03:50:24.020142+00:00 app[web.1]:     apps.populate(settings.INSTALLED_APPS)
2019-02-21T03:50:24.020143+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/apps/registry.py", line 89, in populate
2019-02-21T03:50:24.020144+00:00 app[web.1]:     app_config = AppConfig.create(entry)
2019-02-21T03:50:24.020145+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
2019-02-21T03:50:24.020146+00:00 app[web.1]:     module = import_module(entry)
2019-02-21T03:50:24.020147+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/importlib/__init__.py", line 127, in import_module
2019-02-21T03:50:24.020149+00:00 app[web.1]:     return _bootstrap._gcd_import(name[level:], package, level)
2019-02-21T03:50:24.020150+00:00 app[web.1]: ModuleNotFoundError: No module named 'markdownx'
2019-02-21T03:50:24.020295+00:00 app[web.1]: [2019-02-20 20:50:24 -0700] [10] [INFO] Worker exiting (pid: 10)
2019-02-21T03:50:24.020868+00:00 app[web.1]: [2019-02-20 20:50:24 -0700] [11] [ERROR] Exception in worker process
2019-02-21T03:50:24.020870+00:00 app[web.1]: Traceback (most recent call last):
2019-02-21T03:50:24.020871+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2019-02-21T03:50:24.020872+00:00 app[web.1]:     worker.init_process()
2019-02-21T03:50:24.020873+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
2019-02-21T03:50:24.020874+00:00 app[web.1]:     self.load_wsgi()
2019-02-21T03:50:24.020875+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
2019-02-21T03:50:24.020876+00:00 app[web.1]:     self.wsgi = self.app.wsgi()
2019-02-21T03:50:24.020877+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
2019-02-21T03:50:24.020878+00:00 app[web.1]:     self.callable = self.load()
2019-02-21T03:50:24.020879+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
2019-02-21T03:50:24.020881+00:00 app[web.1]:     return self.load_wsgiapp()
2019-02-21T03:50:24.020882+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2019-02-21T03:50:24.020883+00:00 app[web.1]:     return util.import_app(self.app_uri)
2019-02-21T03:50:24.020884+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
2019-02-21T03:50:24.020885+00:00 app[web.1]:     __import__(module)
2019-02-21T03:50:24.020886+00:00 app[web.1]:   File "/app/lusfood/wsgi.py", line 16, in <module>
2019-02-21T03:50:24.020887+00:00 app[web.1]:     application = get_wsgi_application()
2019-02-21T03:50:24.020888+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
2019-02-21T03:50:24.020889+00:00 app[web.1]:     django.setup(set_prefix=False)
2019-02-21T03:50:24.020890+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
2019-02-21T03:50:24.020892+00:00 app[web.1]:     apps.populate(settings.INSTALLED_APPS)
2019-02-21T03:50:24.020893+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/apps/registry.py", line 89, in populate
2019-02-21T03:50:24.020894+00:00 app[web.1]:     app_config = AppConfig.create(entry)
2019-02-21T03:50:24.020895+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
2019-02-21T03:50:24.020896+00:00 app[web.1]:     module = import_module(entry)
2019-02-21T03:50:24.020897+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.7/importlib/__init__.py", line 127, in import_module
2019-02-21T03:50:24.020898+00:00 app[web.1]:     return _bootstrap._gcd_import(name[level:], package, level)
2019-02-21T03:50:24.020899+00:00 app[web.1]: ModuleNotFoundError: No module named 'markdownx'
2019-02-21T03:50:24.021123+00:00 app[web.1]: [2019-02-20 20:50:24 -0700] [11] [INFO] Worker exiting (pid: 11)
2019-02-21T03:50:24.095455+00:00 app[web.1]: [2019-02-21 03:50:24 +0000] [4] [INFO] Shutting down: Master
2019-02-21T03:50:24.095548+00:00 app[web.1]: [2019-02-21 03:50:24 +0000] [4] [INFO] Reason: Worker failed to boot.
2019-02-21T03:50:24.209586+00:00 heroku[web.1]: State changed from up to crashed
2019-02-21T03:50:24.184457+00:00 heroku[web.1]: Process exited with status 3

It seems like you have both Pipfile and requirements.txt . In that case Heroku is trying to install packages with Pipfile , but your django-markdownx is in dev-packages .

What I would suggest is to decide do you want to use requirements.txt or Pipenv with Pipfile .

  1. If you want requirements.txt just delete Pipfile and Pipfile.lock .
  2. If you want to use Pipfile install it as not dev-package with pipenv install django-markdownx .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM