Having problems pinpointing the issue with deploying my app on dokku. VPS runs on arm64. Seperate apps - staging and prod, but same codebase. Previously deployed succesfully on x86, so i am guessing this could be an issue with architecture,or possibly with some env config i have missed. need help with this, stuck on what to look for.
staging builds fine, prod fails build on requirements.txt:
ERROR: Could not find a version that satisfies the requirement mailchimp-marketing>=3.0.80 (from versions: none).
Both environments have the same python version. I set dokku config:set myapp PIP_NO_BINARY=:all:
for both prod and staging, and also tried to explicitly set buildpack dokku buildpacks:set myapp https://github.com/heroku/heroku-buildpack-python.git
for both.
I tried to clear the cache on staging and prod to see if staging still builds and prod fails, but seems like its still accessing some cached data.this is what i tried rm -rf ~/.cache/pip
. How to properly clear app cache on dokku ?
Here are build logs for both staging and prod
staging (deploys succesfully):
Building app-staging from cnb stack heroku/builder:24 (experimental)...
24: Pulling from heroku/builder
Digest: sha256:31872cb1c6598c13db48d87226fbcf5fabf9c60fcfdc356ba4a403e43e337fa5
Status: Image is up to date for heroku/builder:24
24: Pulling from heroku/heroku
Digest: sha256:e77197ba81c134409dedbca62c305eec6bf93f5e8b039c58ade687abe09cfc40
Status: Image is up to date for heroku/heroku:24
===> ANALYZING
Restoring data for SBOM from previous image
===> DETECTING
2 of 3 buildpacks participating
heroku/python 2.2.0
heroku/procfile 4.2.1
===> RESTORING
Restoring metadata for "heroku/python:python" from app image
Restoring metadata for "heroku/python:pip" from cache
Restoring metadata for "heroku/python:pip-cache" from cache
Restoring data for "heroku/python:pip" from cache
Restoring data for "heroku/python:pip-cache" from cache
Restoring data for "heroku/python:python" from cache
===> BUILDING
[Determining Python version]
Using Python version 3.10 specified in .python-version
[Installing Python]
Discarding cached Python 3.10.17 since:
- The Python version has changed from 3.10.17 to 3.10.18
Installing Python 3.10.18
[Installing pip]
Discarding cached pip 25.1.1
Installing pip 25.1.1
[Installing dependencies using pip]
Discarding cached pip download/wheel cache
Creating virtual environment
Running 'pip install -r requirements.txt'
Collecting amqp==5.3.1 (from -r requirements.txt (line 1))
Downloading amqp-5.3.1-py3-none-any.whl.metadata (8.9 kB)
Collecting asgiref==3.8.1 (from -r requirements.txt (line 2))
Downloading asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)
Collecting async-timeout==5.0.1 (from -r requirements.txt (line 3))
Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)
Collecting attrs==25.3.0 (from -r requirements.txt (line 4))
Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)
Collecting billiard==4.2.1 (from -r requirements.txt (line 5))
Downloading billiard-4.2.1-py3-none-any.whl.metadata (4.4 kB)
Collecting boto3==1.35.99 (from -r requirements.txt (line 6))
Downloading boto3-1.35.99-py3-none-any.whl.metadata (6.7 kB)
Collecting botocore==1.35.99 (from -r requirements.txt (line 7))
Downloading botocore-1.35.99-py3-none-any.whl.metadata (5.7 kB)
Collecting celery==5.4.0 (from -r requirements.txt (line 8))
Downloading celery-5.4.0-py3-none-any.whl.metadata (21 kB)
Collecting certifi==2025.1.31 (from -r requirements.txt (line 9))
Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)
Collecting charset-normalizer==3.4.1 (from -r requirements.txt (line 10))
Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (35 kB)
Collecting click==8.1.8 (from -r requirements.txt (line 11))
Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)
Collecting click-didyoumean==0.3.1 (from -r requirements.txt (line 12))
Downloading click_didyoumean-0.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting click-plugins==1.1.1 (from -r requirements.txt (line 13))
Downloading click_plugins-1.1.1-py2.py3-none-any.whl.metadata (6.4 kB)
Collecting click-repl==0.3.0 (from -r requirements.txt (line 14))
Downloading click_repl-0.3.0-py3-none-any.whl.metadata (3.6 kB)
Collecting dj-database-url==2.3.0 (from -r requirements.txt (line 15))
Downloading dj_database_url-2.3.0-py3-none-any.whl.metadata (12 kB)
Collecting dj-stripe==2.9.0 (from -r requirements.txt (line 16))
Downloading dj_stripe-2.9.0-py3-none-any.whl.metadata (5.0 kB)
Collecting Django==5.1.6 (from -r requirements.txt (line 17))
Downloading Django-5.1.6-py3-none-any.whl.metadata (4.2 kB)
Collecting django-ratelimit==4.1.0 (from -r requirements.txt (line 18))
Downloading django_ratelimit-4.1.0-py2.py3-none-any.whl.metadata (2.3 kB)
Collecting django-recaptcha==3.0.0 (from -r requirements.txt (line 19))
Downloading django_recaptcha-3.0.0-py3-none-any.whl.metadata (17 kB)
Collecting django-redis==5.4.0 (from -r requirements.txt (line 20))
Downloading django_redis-5.4.0-py3-none-any.whl.metadata (32 kB)
Collecting django-storages==1.14.5 (from -r requirements.txt (line 21))
Downloading django_storages-1.14.5-py3-none-any.whl.metadata (4.7 kB)
Collecting exceptiongroup==1.2.2 (from -r requirements.txt (line 22))
Downloading exceptiongroup-1.2.2-py3-none-any.whl.metadata (6.6 kB)
Collecting gunicorn==23.0.0 (from -r requirements.txt (line 23))
Downloading gunicorn-23.0.0-py3-none-any.whl.metadata (4.4 kB)
Collecting h11==0.14.0 (from -r requirements.txt (line 24))
Downloading h11-0.14.0-py3-none-any.whl.metadata (8.2 kB)
Collecting idna==3.10 (from -r requirements.txt (line 25))
Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting jmespath==1.0.1 (from -r requirements.txt (line 26))
Downloading jmespath-1.0.1-py3-none-any.whl.metadata (7.6 kB)
Collecting kombu==5.5.1 (from -r requirements.txt (line 27))
Downloading kombu-5.5.1-py3-none-any.whl.metadata (3.3 kB)
Collecting mailchimp-marketing<3.1,>=3.0.79 (from -r requirements.txt (line 28))
Downloading mailchimp_marketing-3.0.80-py3-none-any.whl.metadata (533 bytes)
Collecting Markdown==3.8 (from -r requirements.txt (line 29))
Downloading markdown-3.8-py3-none-any.whl.metadata (5.1 kB)
Collecting outcome==1.3.0.post0 (from -r requirements.txt (line 30))
Downloading outcome-1.3.0.post0-py2.py3-none-any.whl.metadata (2.6 kB)
Collecting packaging==24.2 (from -r requirements.txt (line 31))
Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)
Collecting pillow==11.1.0 (from -r requirements.txt (line 32))
Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl.metadata (9.1 kB)
Collecting prompt_toolkit==3.0.50 (from -r requirements.txt (line 33))
Downloading prompt_toolkit-3.0.50-py3-none-any.whl.metadata (6.6 kB)
Collecting psycopg2-binary==2.9.10 (from -r requirements.txt (line 34))
Downloading psycopg2_binary-2.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (4.9 kB)
Collecting PySocks==1.7.1 (from -r requirements.txt (line 35))
Downloading PySocks-1.7.1-py3-none-any.whl.metadata (13 kB)
Collecting python-dateutil==2.9.0.post0 (from -r requirements.txt (line 36))
Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting python-dotenv==1.0.1 (from -r requirements.txt (line 37))
Downloading python_dotenv-1.0.1-py3-none-any.whl.metadata (23 kB)
Collecting redis==5.2.1 (from -r requirements.txt (line 38))
Downloading redis-5.2.1-py3-none-any.whl.metadata (9.1 kB)
Collecting requests==2.32.3 (from -r requirements.txt (line 39))
Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
Collecting s3transfer==0.10.4 (from -r requirements.txt (line 40))
Downloading s3transfer-0.10.4-py3-none-any.whl.metadata (1.7 kB)
Collecting selenium==4.29.0 (from -r requirements.txt (line 41))
Downloading selenium-4.29.0-py3-none-any.whl.metadata (7.1 kB)
Collecting sentry-sdk==2.22.0 (from -r requirements.txt (line 42))
Downloading sentry_sdk-2.22.0-py2.py3-none-any.whl.metadata (10 kB)
Collecting six==1.17.0 (from -r requirements.txt (line 43))
Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting sniffio==1.3.1 (from -r requirements.txt (line 44))
Downloading sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting sortedcontainers==2.4.0 (from -r requirements.txt (line 45))
Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl.metadata (10 kB)
Collecting sqlparse==0.5.3 (from -r requirements.txt (line 46))
Downloading sqlparse-0.5.3-py3-none-any.whl.metadata (3.9 kB)
Collecting stripe==11.6.0 (from -r requirements.txt (line 47))
Downloading stripe-11.6.0-py2.py3-none-any.whl.metadata (2.7 kB)
Collecting trio==0.29.0 (from -r requirements.txt (line 48))
Downloading trio-0.29.0-py3-none-any.whl.metadata (8.5 kB)
Collecting trio-websocket==0.12.2 (from -r requirements.txt (line 49))
Downloading trio_websocket-0.12.2-py3-none-any.whl.metadata (5.1 kB)
Collecting typing_extensions==4.12.2 (from -r requirements.txt (line 50))
Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting tzdata==2025.1 (from -r requirements.txt (line 51))
Downloading tzdata-2025.1-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting urllib3==2.3.0 (from -r requirements.txt (line 52))
Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)
Collecting vine==5.1.0 (from -r requirements.txt (line 53))
Downloading vine-5.1.0-py3-none-any.whl.metadata (2.7 kB)
Collecting wcwidth==0.2.13 (from -r requirements.txt (line 54))
Downloading wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
Collecting websocket-client==1.8.0 (from -r requirements.txt (line 55))
Downloading websocket_client-1.8.0-py3-none-any.whl.metadata (8.0 kB)
Collecting wsproto==1.2.0 (from -r requirements.txt (line 56))
Downloading wsproto-1.2.0-py3-none-any.whl.metadata (5.6 kB)
Downloading amqp-5.3.1-py3-none-any.whl (50 kB)
Downloading vine-5.1.0-py3-none-any.whl (9.6 kB)
Downloading asgiref-3.8.1-py3-none-any.whl (23 kB)
Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)
Downloading attrs-25.3.0-py3-none-any.whl (63 kB)
Downloading billiard-4.2.1-py3-none-any.whl (86 kB)
Downloading boto3-1.35.99-py3-none-any.whl (139 kB)
Downloading botocore-1.35.99-py3-none-any.whl (13.3 MB)
Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)
Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Downloading s3transfer-0.10.4-py3-none-any.whl (83 kB)
Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)
Downloading celery-5.4.0-py3-none-any.whl (425 kB)
Downloading click-8.1.8-py3-none-any.whl (98 kB)
Downloading kombu-5.5.1-py3-none-any.whl (209 kB)
Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)
Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (141 kB)
Downloading click_didyoumean-0.3.1-py3-none-any.whl (3.6 kB)
Downloading click_plugins-1.1.1-py2.py3-none-any.whl (7.5 kB)
Downloading click_repl-0.3.0-py3-none-any.whl (10 kB)
Downloading dj_database_url-2.3.0-py3-none-any.whl (7.8 kB)
Downloading dj_stripe-2.9.0-py3-none-any.whl (185 kB)
Downloading Django-5.1.6-py3-none-any.whl (8.3 MB)
Downloading django_ratelimit-4.1.0-py2.py3-none-any.whl (11 kB)
Downloading django_recaptcha-3.0.0-py3-none-any.whl (22 kB)
Downloading django_redis-5.4.0-py3-none-any.whl (31 kB)
Downloading django_storages-1.14.5-py3-none-any.whl (32 kB)
Downloading exceptiongroup-1.2.2-py3-none-any.whl (16 kB)
Downloading gunicorn-23.0.0-py3-none-any.whl (85 kB)
Downloading h11-0.14.0-py3-none-any.whl (58 kB)
Downloading idna-3.10-py3-none-any.whl (70 kB)
Downloading markdown-3.8-py3-none-any.whl (106 kB)
Downloading outcome-1.3.0.post0-py2.py3-none-any.whl (10 kB)
Downloading packaging-24.2-py3-none-any.whl (65 kB)
Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl (4.4 MB)
Downloading prompt_toolkit-3.0.50-py3-none-any.whl (387 kB)
Downloading psycopg2_binary-2.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.9 MB)
Downloading PySocks-1.7.1-py3-none-any.whl (16 kB)
Downloading python_dotenv-1.0.1-py3-none-any.whl (19 kB)
Downloading redis-5.2.1-py3-none-any.whl (261 kB)
Downloading requests-2.32.3-py3-none-any.whl (64 kB)
Downloading selenium-4.29.0-py3-none-any.whl (9.5 MB)
Downloading trio-0.29.0-py3-none-any.whl (492 kB)
Downloading trio_websocket-0.12.2-py3-none-any.whl (21 kB)
Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Downloading websocket_client-1.8.0-py3-none-any.whl (58 kB)
Downloading sentry_sdk-2.22.0-py2.py3-none-any.whl (325 kB)
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)
Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Downloading sqlparse-0.5.3-py3-none-any.whl (44 kB)
Downloading stripe-11.6.0-py2.py3-none-any.whl (1.6 MB)
Downloading tzdata-2025.1-py2.py3-none-any.whl (346 kB)
Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
Downloading wsproto-1.2.0-py3-none-any.whl (24 kB)
Downloading mailchimp_marketing-3.0.80-py3-none-any.whl (109 kB)
Installing collected packages: wcwidth, sortedcontainers, websocket-client, vine, urllib3, tzdata, typing_extensions, sqlparse, sniffio, six, python-dotenv, PySocks, psycopg2-binary, prompt_toolkit, pillow, packaging, Markdown, jmespath, idna, h11, exceptiongroup, django-ratelimit, click, charset-normalizer, certifi, billiard, attrs, async-timeout, wsproto, sentry-sdk, requests, redis, python-dateutil, outcome, gunicorn, click-repl, click-plugins, click-didyoumean, asgiref, amqp, trio, stripe, mailchimp-marketing, kombu, Django, botocore, trio-websocket, s3transfer, django-storages, django-redis, django-recaptcha, dj-stripe, dj-database-url, celery, selenium, boto3
Successfully installed Django-5.1.6 Markdown-3.8 PySocks-1.7.1 amqp-5.3.1 asgiref-3.8.1 async-timeout-5.0.1 attrs-25.3.0 billiard-4.2.1 boto3-1.35.99 botocore-1.35.99 celery-5.4.0 certifi-2025.1.31 charset-normalizer-3.4.1 click-8.1.8 click-didyoumean-0.3.1 click-plugins-1.1.1 click-repl-0.3.0 dj-database-url-2.3.0 dj-stripe-2.9.0 django-ratelimit-4.1.0 django-recaptcha-3.0.0 django-redis-5.4.0 django-storages-1.14.5 exceptiongroup-1.2.2 gunicorn-23.0.0 h11-0.14.0 idna-3.10 jmespath-1.0.1 kombu-5.5.1 mailchimp-marketing-3.0.80 outcome-1.3.0.post0 packaging-24.2 pillow-11.1.0 prompt_toolkit-3.0.50 psycopg2-binary-2.9.10 python-dateutil-2.9.0.post0 python-dotenv-1.0.1 redis-5.2.1 requests-2.32.3 s3transfer-0.10.4 selenium-4.29.0 sentry-sdk-2.22.0 six-1.17.0 sniffio-1.3.1 sortedcontainers-2.4.0 sqlparse-0.5.3 stripe-11.6.0 trio-0.29.0 trio-websocket-0.12.2 typing_extensions-4.12.2 tzdata-2025.1 urllib3-2.3.0 vine-5.1.0 wcwidth-0.2.13 websocket-client-1.8.0 wsproto-1.2.0
[Generating Django static files]
Skipping automatic static file generation since no Django 'manage.py'
script (or symlink to one) was found in the root directory of your
application.
## Procfile Buildpack
- Processes from `Procfile`
- web: `sh -c 'cd app && gunicorn --timeout 1200 --workers 2 app.wsgi:application --log-level debug'`
- release: `sh -c 'python3 app/manage.py migrate --noinput && python3 app/manage.py collectstatic --noinput'`
- worker: `sh -c 'cd app && celery -A app worker -l info -Q ${APP_ENV}_tasks'`
- Done (finished in < 0.1s)
===> EXPORTING
Adding layer 'heroku/python:python'
Adding layer 'heroku/python:venv'
Adding layer 'buildpacksio/lifecycle:launch.sbom'
Added 1/1 app layer(s)
Adding layer 'buildpacksio/lifecycle:launcher'
Adding layer 'buildpacksio/lifecycle:config'
Reusing layer 'buildpacksio/lifecycle:process-types'
Adding label 'io.buildpacks.lifecycle.metadata'
Adding label 'io.buildpacks.build.metadata'
Adding label 'io.buildpacks.project.metadata'
Setting default process type 'web'
Saving dokku/app-staging:latest...
*** Images (d3b62e6de221):
dokku/app-staging:latest
Adding cache layer 'heroku/python:pip'
Adding cache layer 'heroku/python:pip-cache'
Adding cache layer 'heroku/python:python'
Successfully built image 'dokku/app-staging:latest'
-----> Releasing app-staging...
-----> Checking for predeploy task
No predeploy task found, skipping
-----> Checking for release task
Executing release task from Procfile in ephemeral container: sh -c 'python3 app/manage.py migrate --noinput && python3 app/manage.py collectstatic --noinput'
=====> Start of app-staging release task (0c1f9d274) output
Operations to perform:
Apply all migrations: admin, auth, contenttypes, ecom, sessions
Running migrations:
No migrations to apply.
0 static files copied, 138 unmodified.
=====> End of app-staging release task (0c1f9d274) output
=====> Processing deployment checks
remote: ! No healthchecks found in app.json for web process type
No web healthchecks found in app.json. Simple container checks will be performed.
For more efficient zero downtime deployments, add healthchecks to your app.json. See https://dokku.com/docs/deployment/zero-downtime-deploys/ for examples
-----> Deploying app-staging via the docker-local scheduler...
-----> Deploying web (count=1)
Attempting pre-flight checks (web.1)
-----> Executing 2 healthchecks
Running healthcheck name='default' type='uptime' uptime=10
Running healthcheck name='port listening check' attempts=3 port=5000 retries=2 timeout=5 type='listening' wait=5
Healthcheck succeeded name='port listening check'
Healthcheck succeeded name='default'
All checks successful (web.1)
=====> Start of app-staging container output (bcf05564f1fb web.1)
[2025-06-05 07:48:17 +0000] [14] [DEBUG] Current configuration:
config: ./gunicorn.conf.py
wsgi_app: None
bind: ['0.0.0.0:5000']
backlog: 2048
workers: 2
worker_class: sync
threads: 1
worker_connections: 1000
max_requests: 0
max_requests_jitter: 0
timeout: 1200
graceful_timeout: 30
keepalive: 2
limit_request_line: 4094
limit_request_fields: 100
limit_request_field_size: 8190
reload: False
reload_engine: auto
reload_extra_files: []
spew: False
check_config: False
print_config: False
preload_app: False
sendfile: None
reuse_port: False
chdir: /workspace/app
daemon: False
raw_env: []
pidfile: None
worker_tmp_dir: None
user: 1000
group: 1000
umask: 0
initgroups: False
tmp_upload_dir: None
secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
forwarded_allow_ips: ['127.0.0.1', '::1']
accesslog: None
disable_redirect_access_to_syslog: False
access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
errorlog: -
loglevel: debug
capture_output: False
logger_class: gunicorn.glogging.Logger
logconfig: None
logconfig_dict: {}
logconfig_json: None
syslog_addr: udp://localhost:514
syslog: False
syslog_prefix: None
syslog_facility: user
enable_stdio_inheritance: False
statsd_host: None
dogstatsd_tags:
statsd_prefix:
proc_name: None
default_proc_name: app.wsgi:application
pythonpath: None
paste: None
on_starting: <function OnStarting.on_starting at 0xffff9ab87ac0>
on_reload: <function OnReload.on_reload at 0xffff9ab87be0>
when_ready: <function WhenReady.when_ready at 0xffff9ab87d00>
pre_fork: <function Prefork.pre_fork at 0xffff9ab87e20>
post_fork: <function Postfork.post_fork at 0xffff9ab87f40>
post_worker_init: <function PostWorkerInit.post_worker_init at 0xffff9a3740d0>
worker_int: <function WorkerInt.worker_int at 0xffff9a3741f0>
worker_abort: <function WorkerAbort.worker_abort at 0xffff9a374310>
pre_exec: <function PreExec.pre_exec at 0xffff9a374430>
pre_request: <function PreRequest.pre_request at 0xffff9a374550>
post_request: <function PostRequest.post_request at 0xffff9a3745e0>
child_exit: <function ChildExit.child_exit at 0xffff9a374700>
worker_exit: <function WorkerExit.worker_exit at 0xffff9a374820>
nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0xffff9a374940>
on_exit: <function OnExit.on_exit at 0xffff9a374a60>
ssl_context: <function NewSSLContext.ssl_context at 0xffff9a374b80>
proxy_protocol: False
proxy_allow_ips: ['127.0.0.1', '::1']
keyfile: None
certfile: None
ssl_version: 2
cert_reqs: 0
ca_certs: None
suppress_ragged_eofs: True
do_handshake_on_connect: False
ciphers: None
raw_paste_global_conf: []
permit_obsolete_folding: False
strip_header_spaces: False
permit_unconventional_http_method: False
permit_unconventional_http_version: False
casefold_http_method: False
forwarder_headers: ['SCRIPT_NAME', 'PATH_INFO']
header_map: drop
[2025-06-05 07:48:17 +0000] [14] [INFO] Starting gunicorn 23.0.0
[2025-06-05 07:48:17 +0000] [14] [DEBUG] Arbiter booted
[2025-06-05 07:48:17 +0000] [14] [INFO] Listening at: http://0.0.0.0:5000 (14)
[2025-06-05 07:48:17 +0000] [14] [INFO] Using worker: sync
[2025-06-05 07:48:17 +0000] [15] [INFO] Booting worker with pid: 15
[2025-06-05 07:48:17 +0000] [16] [INFO] Booting worker with pid: 16
[2025-06-05 07:48:17 +0000] [14] [DEBUG] 2 workers
=====> End of app-staging container output (bcf05564f1fb web.1)
Scheduling old container shutdown in 60 seconds (web.1)
=====> Triggering early nginx proxy rebuild
-----> Ensuring network configuration is in sync for app-staging
-----> Configuring staging.app.com...(using built-in template)
-----> Configuring www.staging.app.com...(using built-in template)
-----> Creating https nginx.conf
Enabling HSTS (using built-in template)
Reloading nginx
-----> Deploying worker (count=0)
-----> Running post-deploy
-----> Ensuring network configuration is in sync for app-staging
-----> Configuring staging.app.com...(using built-in template)
-----> Configuring www.staging.app.com...(using built-in template)
-----> Creating https nginx.conf
Enabling HSTS (using built-in template)
Reloading nginx
-----> Renaming containers
Found previous container(s) (38888c279aa0) named app-staging.web.1
Renaming container (38888c279aa0) app-staging.web.1 to app-staging.web.1.1749109718
Renaming container app-staging.web.1.upcoming-32409 (bcf05564f1fb) to app-staging.web.1
-----> Checking for postdeploy task
No postdeploy task found, skipping
-----> Updated schedule file
-----> Shutting down old containers in 60 seconds
=====> Application deployed:
http://staging.app.com
http://www.staging.app.com
https://staging.app.com
https://www.staging.app.com
prod (fails on installing pip dependencies) :
Enumerating objects: 113, done.
Counting objects: 100% (113/113), done.
Delta compression using up to 2 threads
Compressing objects: 100% (103/103), done.
Writing objects: 100% (104/104), 10.11 KiB | 2.53 MiB/s, done.
Total 104 (delta 67), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (67/67), completed with 9 local objects.
remote: ! Herokuish builder not supported on arm64 servers.
remote: ! Switching to pack builder.
-----> Cleaning up...
-----> Building app-prod from cnb stack heroku/builder:24 (experimental)...
24: Pulling from heroku/builder
Digest: sha256:31872cb1c6598c13db48d87226fbcf5fabf9c60fcfdc356ba4a403e43e337fa5
Status: Image is up to date for heroku/builder:24
24: Pulling from heroku/heroku
Digest: sha256:e77197ba81c134409dedbca62c305eec6bf93f5e8b039c58ade687abe09cfc40
Status: Image is up to date for heroku/heroku:24
===> ANALYZING
Restoring data for SBOM from previous image
===> DETECTING
2 of 3 buildpacks participating
heroku/python 2.2.0
heroku/procfile 4.2.1
===> RESTORING
Restoring metadata for "heroku/python:python" from app image
Restoring metadata for "heroku/python:pip" from cache
Restoring metadata for "heroku/python:pip-cache" from cache
Restoring data for "heroku/python:pip" from cache
Restoring data for "heroku/python:pip-cache" from cache
Removing "heroku/python:python", wrong sha
===> BUILDING
[Determining Python version]
Using Python version 3.10 specified in .python-version
[Installing Python]
Installing Python 3.10.18
[Installing pip]
Using cached pip 25.1.1
[Installing dependencies using pip]
Using cached pip download/wheel cache
Creating virtual environment
Running 'pip install -r requirements.txt'
Collecting amqp==5.3.1 (from -r requirements.txt (line 1))
Using cached amqp-5.3.1-py3-none-any.whl
Collecting asgiref==3.8.1 (from -r requirements.txt (line 2))
Using cached asgiref-3.8.1-py3-none-any.whl
Collecting async-timeout==5.0.1 (from -r requirements.txt (line 3))
Using cached async_timeout-5.0.1-py3-none-any.whl
Collecting attrs==25.3.0 (from -r requirements.txt (line 4))
Using cached attrs-25.3.0-py3-none-any.whl
Collecting billiard==4.2.1 (from -r requirements.txt (line 5))
Using cached billiard-4.2.1-py3-none-any.whl
Collecting boto3==1.35.99 (from -r requirements.txt (line 6))
Using cached boto3-1.35.99-py3-none-any.whl
Collecting botocore==1.35.99 (from -r requirements.txt (line 7))
Using cached botocore-1.35.99-py3-none-any.whl
Collecting celery==5.4.0 (from -r requirements.txt (line 8))
Using cached celery-5.4.0-py3-none-any.whl
Collecting certifi==2025.1.31 (from -r requirements.txt (line 9))
Using cached certifi-2025.1.31-py3-none-any.whl
Collecting charset-normalizer==3.4.1 (from -r requirements.txt (line 10))
Using cached charset_normalizer-3.4.1-py3-none-any.whl
Collecting click==8.1.8 (from -r requirements.txt (line 11))
Using cached click-8.1.8-py3-none-any.whl
Collecting click-didyoumean==0.3.1 (from -r requirements.txt (line 12))
Using cached click_didyoumean-0.3.1-py3-none-any.whl
Collecting click-plugins==1.1.1 (from -r requirements.txt (line 13))
Using cached click_plugins-1.1.1-py2.py3-none-any.whl
Collecting click-repl==0.3.0 (from -r requirements.txt (line 14))
Using cached click_repl-0.3.0-py3-none-any.whl
Collecting dj-database-url==2.3.0 (from -r requirements.txt (line 15))
Using cached dj_database_url-2.3.0-py3-none-any.whl
Collecting dj-stripe==2.9.0 (from -r requirements.txt (line 16))
Using cached dj_stripe-2.9.0-py3-none-any.whl
Collecting Django==5.1.6 (from -r requirements.txt (line 17))
Using cached Django-5.1.6-py3-none-any.whl
Collecting django-ratelimit==4.1.0 (from -r requirements.txt (line 18))
Using cached django_ratelimit-4.1.0-py2.py3-none-any.whl
Collecting django-recaptcha==3.0.0 (from -r requirements.txt (line 19))
Using cached django_recaptcha-3.0.0-py3-none-any.whl
Collecting django-redis==5.4.0 (from -r requirements.txt (line 20))
Using cached django_redis-5.4.0-py3-none-any.whl
Collecting django-storages==1.14.5 (from -r requirements.txt (line 21))
Using cached django_storages-1.14.5-py3-none-any.whl
Collecting exceptiongroup==1.2.2 (from -r requirements.txt (line 22))
Using cached exceptiongroup-1.2.2-py3-none-any.whl
Collecting gunicorn==23.0.0 (from -r requirements.txt (line 23))
Using cached gunicorn-23.0.0-py3-none-any.whl
Collecting h11==0.14.0 (from -r requirements.txt (line 24))
Using cached h11-0.14.0-py3-none-any.whl
Collecting idna==3.10 (from -r requirements.txt (line 25))
Using cached idna-3.10-py3-none-any.whl
Collecting jmespath==1.0.1 (from -r requirements.txt (line 26))
Using cached jmespath-1.0.1-py3-none-any.whl
Collecting kombu==5.5.1 (from -r requirements.txt (line 27))
Using cached kombu-5.5.1-py3-none-any.whl
remote: ERROR: Could not find a version that satisfies the requirement mailchimp-marketing==3.0.80 (from versions: none)
remote: ERROR: No matching distribution found for mailchimp-marketing==3.0.80
remote:
remote: [Error: Unable to install dependencies using pip]
remote: The 'pip install -r requirements.txt' command to install the app's
remote: dependencies failed (exit status: 1).
remote:
remote: See the log output above for more information.
remote:
ERROR: failed to build: exit status 1
remote: ERROR: failed to build: executing lifecycle: failed with status code: 51
remote: ! Retagging old image 35dbb037db0c as dokku/app-prod:latest
remote: ! App build failed
Does this point to any env differences, anything i should check ?
You are setting PIP_NO_BINARY
to :all:
. This means pip will not use wheels (binary) but only source archives. However, mailchip-marketing does not have source archive, only a wheel.
Remove or tweak the value of PIP_NO_BINARY