'heroku: no default language could be detected for this app
First time using Heroku. Trying to push. I have run the command:
heroku create --buildpack heroku/python
and it displayed
$ heroku create --buildpack heroku/python
Creating app... done, glacial-reef-7599
Setting buildpack to heroku/python... done
https://glacial-reef-7599.herokuapp.com/ | https://git.heroku.com/glacial-reef-7599.git
Stack trace:
$ git push heroku master
Counting objects: 129, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (124/124), done.
Writing objects: 100% (129/129), 69.06 KiB | 0 bytes/s, done.
Total 129 (delta 22), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: ! No default language could be detected for this app.
remote: HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote: See https://devcenter.heroku.com/articles/buildpacks
remote:
remote: ! Push failed
remote: Verifying deploy...
remote:
remote: ! Push rejected to pure-badlands-9125.
remote:
To https://git.heroku.com/pure-badlands-9125.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/pure-badlands-9125.git'
I've gotta be missing something.
I have added a requirements.txt
to my root directory. It looks like this:
.git
.idea
projectapp
projectname
rango
db.sqlite3
manage.py
populate_rango.py
requirements.txt
Solution 1:[1]
I can't remember how I fixed this but looking at the Date Modified
in my files after I posted this question I created two files:
runtime.txt
(thanks rurp) which contains:
python-3.5.2
Procfile
which contains:
web: gunicorn projectname.wsgi --log-file -
This is a Django project and projectname.wsgi
leads to a wsgi.py
located at
projectname/wsgi.py
This contains:
import os
import signal
import sys
import traceback
import time
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectname.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
Solution 2:[2]
Quick Solution
- Goto heroku dashboard (https://dashboard.heroku.com/)
- go inside app/project
- click setting
- scroll down little bit and click add build pack
- select your desired buildpack (in my case i have selected heroku/nodejs).
TLDR;
Actually what heroku does is, it tries to identify what project you are deploying by looking at files in your project, such as if your project have package.json
file it understands it is a nodejs project, if your project have requirements.txt
file it understands it is a python project and so on, see this document to see to know what languages you can run on a heroku server
as you know to run a specific project such as a nodejs project in a computer node runtime must be installed in that computer otherwise you can not nodejs app in the computer, what heroku does it runs each of your app in a different container, it means in one container it is only one app is running and of course that container have installed nodejs, so if a container runs only one app it doesnt make sense to install all other runtimes in the container so container have only one runtime in my case it is nodejs. they have ofcourse other type of containers such as one type for python and that container have installed python runtime(of a specific version) so if my app gets installed in python container it will not work because my app in in nodejs. for this very reason somehow we need to identify the type of app in beginning to choose correct container type, mostly heroku automatically detect it but if it is failed to detect you have to tell explicitly either by going to their dashboard settings or through runtime file in your project, and as you may have noticed you have do this only once.
Solution 3:[3]
For future references, you must ensure that you are pushing the branch with your code to heroku master
.
If you branched from your master
branch and all your code is on a, say, develop
, push that to the heroku master.
So instead of:
git push heroku master
You would do something like:
git push heroku develop:master
This question has important details on this How to push different local Git branches to Heroku/master
Solution 4:[4]
You need to create a runtime.txt file. On the command line, in the same folder as your requirements.txt file, enter echo "python-3.5.1" > runtime.txt
. Of course, make sure to switch the 3.5.1 with whichever version of Python you are using.
Solution 5:[5]
When deploying using Docker
, ensure to set the stack of the app to container
, as shown in the docs:
heroku stack:set container
Solution 6:[6]
I had the same problem even after including runtime.txt. What worked was the inclusion of the requirements.txt
Solution 7:[7]
In my case I was in a sub git folder. When I looked at the root .git folder - the project indeed didn't had a package.json
file - so heroku could not identify the webpack
Solution 8:[8]
Heroku’s Python support extends to the latest stable release from the Python 2.x and Python 3.x series. Today, this support extends to these specific runtimes:
- python-2.7.13
- python-3.6.1
try to change your python version in runtime.txt
Solution 9:[9]
I was running a django project and for me none of the solution above worked. So finally I gave up and went to the path thats mentioned in the error and it clearly stated that heroku needs either of the below file to detect a django project:
- requirements.txt
- setup.py
- Pipfile
I than created a requirements.txt file by copying the contents of pip freeze in the root of the project and it worked correctly.
Solution 10:[10]
Faced this issue today and released I had named my requirements.txt
as requirements.txt.txt
(I literally named the file with .txt extension when it was already a text file), I also had a runtime.txt
file with the content python-3.8.7
.
Renaming the requirements.txt file correctly solved my issue.
I had 3 files in my root folder: code.py, requirements.txt and runtime.txt
Solution 11:[11]
Create Pipfile file in root folder and add python version
and packages required for application. check sample file here
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[packages]
django = "*"
gunicorn = "*"
django-heroku = "*"
[requires]
python_version = "3.6"
Also check Configuring Django Apps for Heroku
Solution 12:[12]
One more thing to note is to actually commit your changes to your git repo, before you can push them to Heroku.
You might have a requirements.txt setup locally, but if it's not committed to your repo, git push heroku master
will not be able to locate it.
Solution 13:[13]
If you've tried some of the above answers and the problem still persists;
Ensure you are git
"committing" in the right directory.
For instance, if your file structure is as follow:
/src
/...
manage.py
.gitignore
Pipfile/requirements.txt
Pipfile.lock
Procfile
runtime.txt
Ensure you're git
adding, committing, pushing etc. from the root directory. Since we work mostly in the src/
or main_app_directory/
we tend to forget to change directory back to root before committing.
Solution 14:[14]
Hey guys so I have been stuck on this issue for the past two days and I found the solution to my problem. The first fix was renaming
"requirement.txt" to "requirements.txt" then I removed the runtime.txt cleared buildpacks using heroku cli set the buildpack to python
heroku buildpacks:set heroku/python
and Boom! it got uploaded an everything works now
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow