How can I get Heroku to detect buildpack? - python

I am trying to deploy my Pyramid app on Heroku and no matter what I do, I get the failed to detect buildpack error message after I try to push.
I have my requirements.txt from my pip freeze in there next to my setup.py as well as my Procfile and runapp.py. I am not using my master branch for Heroku and have been using
git push heroku local_branch:master
I have also tried to set the build pack manually by using
heroku buildpacks:set heroku/python
I also have tried using external buildpacks from github, but that also does not work. I must be missing something in my requirements.txt?
Also, I have read Pyramid's Docs on Heroku deployment as well as Heroku's. I have browsed here for help but all I can find is that to make sure requirements.txt is spelled correctly or just re-init my git.

Add a "requirements.txt" file to the root directory of your repository.

Related

Heroku things my build pack is node.js when its python

I made a package.json and added:
Heroku buildpacks:set heroku/python
It still fails when deploying. This is a python app so I don't know what is happening.
-----> Building on the Heroku-20 stack
-----> Determining which buildpack to use for this app
-----> Node.js app detected
parse error: Invalid numeric literal at line 1, column 7
! Unable to parse package.json
-----> Build failed
We're sorry this build is failing! You can troubleshoot common issues here:
https://devcenter.heroku.com/articles/troubleshooting-node-deploys
If you're stuck, please submit a ticket so we can help:
https://help.heroku.com/
Love,
Heroku
! Push rejected, failed to compile Node.js app.
! Push failed
For apps that do not have a buildpack explicitly set, Heroku tries to detect which buildpack to use in the following order:
Ruby
Node.js
Clojure
Python
...
Buildpack detection is based on the presence of certain files. In the case of the Node.js buildpack, it looks for a package.json in the root directory of the project. It looks like your app has such a file.
Your question isn't entirely clear, but I think you put this text inside your package.json:
Heroku buildpacks:set heroku/python
That is not valid, so the Node.js buildpack doesn't know what to do with it.
A package.json file is from the Node.js ecosystem, and it must have a specific set of keys and values. Unless your application also requires Node.js, you shouldn't have a package.json file at all. Assuming you don't need that file, delete it and commit its removal.
Your Python project will need one of the following:
requirements.txt
setup.py
Pipfile and Pipfile.lock
If you already have one of these, great. Just redeploy and Heroku should detect your app as a Python app.
If you don't have any of these, the easiest thing to do is to place an empty requirements.txt file in the root of your project. Make sure to commit it before deploying again.
If you wish to be explicit, you can run the command you tried to use before on the command line:
heroku buildpacks:set heroku/python
This shouldn't be necessary for a single-language app, though. Note that heroku is all lowercase.

Heroku "Couldn't find that process type"

Been trying to deploy my python selenium code to Heroku but I keep running into this issue:
--
Terminal command:
heroku ps:scale bot=1
Output:
» Warning: heroku update available from 7.53.0 to 7.59.2.
Scaling dynos... !
! Couldn't find that process type (bot).
Procfile:
bot: python sfkafskafne.py
(Pycharm)
I'm deploying attempting to deploy to Heroku using the PyCharm terminal with the command above
I'm deploying attempting to deploy to Heroku using the PyCharm terminal with the command above
None of the commands in your post deploy your code. heroku ps:scale scales dynos for code that has already been deployed.
Before you scale your dynos, you need to get your code onto Heroku by deploying it. You can do so via git push, GitHub integration, or Docker.
The first two options require that your code be committed to a Git repository. That's a good idea anyway, even if you choose to use Docker deployment.
For the first option, something like this should get you going:
Change to the project directory with cd INSTTTAAAAA
Create a Git repository with git init
Commit your code with git add . followed by git commit -m "Initial commit"
Add a remote with heroku git:remote
Push your code with git push heroku main
Beyond this, I suggest you read the documentation I linke to above. There's lots more to learn that's beyond the scope of a SO question.
You will also want to push your code to GitHub or similar as well. Heroku is not meant to be your primary source code repository.
Side note: I'm not sure if INSTTTAAAA and sfkafskafne mean something in a language that you speak, but if these are effectively random I strongly urge you to rename them. Using good, clear names is very important.

Deploying Flask application to Heroku gives an ImportError from psycopg2

Recently I'm learning Flask by the book "Flask Web Development". When I completed the code and deployed it to Heroku, the following error happened:
ImportError: /app/.heroku/python/lib/python3.6/
sitepackages/psycopg2/.libs/libresolv-2-c4c53def.5.so:
symbol __res_maybe_init version GLIBC_PRIVATE not defined
in file libc.so.6 with link time reference
However, this works fine locally. I have searched relevant questions about psycopg2, and I have adjusted the version of psycopg2 but the same error still happens. Please, how can I solve the problem?
I got the same problem. I solved it by forcing heroku to clean up the python virtual environment, and reinstall the requirements.txt file using psycopg2>=2.7,<2.8 --no-binary psycopg2. I must admit it felt a little like magic, but for what its worth here are the steps I took:
Using Git Bash for Windows, I logged in to heroku with heroku login.
Next, I navigated to the root folder of the git/project folder I was working on.
There I made sure that my requirements.txt was updated by running venv/Scripts/pip freeze > requirements.txt. You will probably have to find your own python/virtual environment path.
Next I changed the line/entry for psycopg2 to psycopg2>=2.7,<2.8 --no-binary psycopg2.
Then saved all the content of the requirements.txt file to my desktop, making sure the one in my project folder was empty. Not sure if this step was necessary. But that's what I did, so I'm just gonna mention it here.
Now in the Git Bash terminal I ran heroku apps:info -a blogglistene to find the version of the my heroku stack which for me was heroku-18.
Next I look online for the supported versions of python for heroku-18. It said the default was python-3.6.6 (which I then assumed is the one I was running), and some others.
I then picked python-2.7.15 arbitrarily from the list, and added that text to a runtime.txt file which I placed in the root of my project folder.
Next I committed and pushed this to my heroko git repo, and it was deployed. This will temporarily break the build. From what I understand, the magic behind this is that heroku now fully destroys the python interpreted and environment, so no lingering cached files or anything. Clean slate.
Then I reverted the content of runtime.txt to the default of python-3.6.6 and added back the content of the requirements.txt file, making sure the changes I made are there.
Finally, I committed and pushed this, and my application was back up and running.
I had the exact same problem when I was following "Flask Web Development". I spent a day plus trying to solve it and eventually succeeded. It's not as complicated as André C. Andersen's method.
Make sure you are on master branch. Not other branches.
The book is second edition of Flask Web Development by Miguel Grinberg. Chapter 17. Deployment. When you work all the way till Deploying with git push, after git push heroku master to upload the application to the heroku remote. The application is now deployed and running, but it is not going to work correctly because the deploy command that initializes the database tables has not been executed yet. You need to use
heroku run flask deploy
to create database on heroku. That's where the problem appears.
This is because at this point your git repo HEAD is at 17c. It's not the master branch yet. If you commit any change now, it won't change heroku environment. Meaning when you do
git branch
You will see:
(HEAD detached from 17c)
master
But this is not what you want. Not head attached to 17c. You want to see only master, which is achieved with
git checkout master
Then git branch will show only master branch. Therefore you can make adjustments on the project and heroku will update. Doing this because you will eventually git push to master branch. I think you can git push to other branches in order for heroku to work, but I don't know how to do that.
Change psycopg2==2.7.3 to the newest version, e.g. psycopg2==2.8.4. Another workaround is to change it to psycopg2-binary==2.8.3.
psycopg2 2.7.3 will give you GLIBC_PRIVATE error. (You can check it by running heroku run bash, then starting python and importing psycopg2. If heroku dependency is 2.7.3, then you will see the same error.) The official website notes that version 2.7.3.1 drops libresolv which causes the issue, therefore using this version or later should do the trick.
Now, change your requirements/heroku.txt (heroku environment dependency) line psycopg2==2.7.3 to psycopg2--2.8.4 or psycopg2-binary==2.8.3. (For some reason binary version of psycopg2 will work without issue. Don't know why, but I saw A LOT of discussion on stackover.) Then,
git add .
git commit -m "notes"
As usual.
git push heroku master
Push to heroku master branch. If you do not do step 1, then git will show Everything up-to-date. Therefore, it won't make changes because you are committing not to master. Now, you can see git is downloading the appropriate package.
You can double check if the packages are correct by opening heroku bash then pip list. You will see psycopg2 (and psycopg2-binary if you chose the workaround). Now, when you start Python, you can import psycopg2 with no problem.
Finally. heroku run flask deploy. Voila!
I was stuck on step 1, since whatever change I made with the project, heroku just didn't update.

Heroku buildpack error while pushing

When i try to add my github repo Gitlink i get this error
! No default language could be detected for this app.
HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
See https://devcenter.heroku.com/articles/buildpacks
! Push failed
What is wrong???
Heroku knows that your app is a Python app by the existence of one of two files in the root of your application:
PipFile
requirements.txt
You should set up a requirements.txt or Pipfile in order to get your project work on Heroku. In addition, you will need Postgres as your deployment DB, if you need a db at all.
You can have a look for more at the docs or the getting started guide

Heroku not loading procfile

I've tried other peoples solutions to getting there procfile recognised and it's just not working for me. Really confused about how I can get heroku to recognize my Procfile! I've moved it around into different folders and whatnot but it just won't recognise it.
web: waitress-serve --port=$PORT alex1.wsgi:application
This is my code. It's sitting right next to my requirements.txt file which is getting picked up by heroku fine. using echo to create the file or even echo is not working.
https://github.com/Hewlbern/Videography-Website/tree/master/Alex1 <--- the github link that I'm trying to deploy to heroku from. Can see where i've placed it and etc if anyone can help!
Such sad, many mad.
EDIT
Put them at top of directory - still not working.
Here's the error log.
-----> Python app detected
! Warning: Your application is missing a Procfile. This file tells Heroku how to run your application.
! Learn more: https://devcenter.heroku.com/articles/procfile
-----> Installing requirements with pip
-----> $ python manage.py collectstatic --noinput
63 static files copied to '/tmp/build_b9ce82b65ae441b651c56911a7474859/Hewlbern-ConsultingPage-1720e65/djreact/static/root'.
-----> Discovering process types
Procfile declares types -> (none)
-----> Compressing...
Done: 64.3M
-----> Launching...
Released v19
https://consultingpage.herokuapp.com/ deployed to Heroku
In response to Mike's point below I went through his example I reached this point.
C:\Users\Holbinator\Desktop\Software Dev\Alexandria>git push heroku master fatal: 'heroku' does not appear to be a git repository fatal: Could not read from remote repository.
I then re-did Git Init in the root directory and then tried to load the code from Github.
This led to the same issue.
I'll put this in my edit. Thanks! I'm going to try and do your method now and work out why I couldn't in this instance.
EDIT TWO
Now realised I needed to delete a extra heroku app. Now loading the files using heroku cli. Have no received an error, unsure how to access error logs but will try and solve the issue now.
First point of my recommendation will be to put .idea directory in .gitignore file.
I've uploaded your application on heroku and as result -Procfile was added successfully.
Steps:
git add . in your root directory
git commit -m "init commit"
heroku create
git push heroku master
That's mine result, but you will probably see something similar to this :
Afterwards I've launched your application via heroku open command and received the 500 error.
Screenshot of logs
I hope this answer will be useful, also read about deploy on heroku
UPD: Please check if you using git init in your root directory of project

Categories

Resources