Editing files directly in Heroku - heroku

Is it possible to edit files directly in Heroku? It's very uncomfortable to push serveral commits and run heroku logs --tail and this command doesn't display readable resons on the errors.

Related

No images to push error when container:push web in docker laravel heroku

I just learned about this problem so there is a bug that has not been fixed yet. For example "No images to push" when running the "heroku container:push web" command. Please help me, thanks you so much!!!
my err:
heroku.yml:
web.dockerfile:
Heroku provides two different methods for deploying with Docker that you're mixing up:
The container registry uses the heroku container:push command, but not heroku.yml.
If you wish to use this option, you need to rename your web.dockerfile to Dockerfile.web (or simply Dockerfile if it is your only image). You should also delete heroku.yml since it doesn't do anything.
Once your Dockerfile has been renamed, heroku container:push should be able to build and push your container.
Building with heroku.yml doesn't use heroku container:push.
If you wish to use this version, you'll need to follow a different set of instructions:
Make sure your heroku.yml file is committed
Tell Heroku to use the container stack:
heroku stack:set container
Deploy your code, e.g. by running git push heroku main
With this flow, Heroku will build your image from your heroku.yml file server-side.

heroku finds an old project that i ave deleted on my heroku homepages

When I try to disable static files on Heroku it keeps linking to a previous project. However, I deleted all my Heroku projects so there are none in my account.
How is this possible and how do I fix it? The heroku CLI seems to be trying to find vast-depths-55781 but the project I just created is immense-ridge-40969:
Heroku determines which app it should use based on your configured Git remotes.
Run git remote -v to see which ones you have set up; I suspect you'll see one pointing to vast-depths-59781. Remove it by its name, e.g.
git remote remove heroku
You could manually add a remote for your new app (or have just changed the previous one's URL), but Heroku provides a dedicated command for setting this up:
heroku git:remote --app immense-ridge-40969
Now heroku commands should default to the new app in that folder. (You can always provide the --app argument to tell heroku to operate against a different app if you wish.)

"Couldn't find that app." when running heroku commands in console

I'm trying to run commands for my heroku app in my console, but it keeps telling me "Couldn't find that app." even though when I run heroku apps in my console it tells me I have one app called worldofwarcraft-api
So heroku recognizes my app in the apps list, but I can't run any commands to access it. The line I want to run is
heroku ps:scale web=1 --app worldofwarcraft-api
I'm trying to troubleshoot why my API returns a 503 when I try to make a GET request to it. This is the fix the heroku faq told me to try, but it's just telling me it can't find my app.
I'm wondering if it has something to do with the fact that I deployed my API from github, rather than running the heroku setup in my console. I don't know if that would effect my ability to run heroku commands on the app in my local console.
Apologies if my formatting is off a bit. I'm still getting used to this site.
In my case, someone renamed GitHub repo and I tried to find Heroku app with new GitHub name
It helps me
heroku apps
heroku git:remote -a YOUR_APP
Solved it. Just sharing for future searches.
The issue was fixed by running git init and then heroku git:remote -a worldofwarcraft-api in my command line while inside my repositories folder. This initialized git in the repo and then set the heroku git remote to that repository.
Hopefully, this helps anyone else who had a similar issue.
Just an easy way to solve this issue:
1st: Add the command into your terminal: $ heroku apps
If you already logged into your heroku account from your terminal, all your apps will appear as a list like this:
your-project-name-1
your-project-name-2
your-project-name-3
your-project-name-4
2nd: Then chose which one you are needing to connect with the following command:
$ heroku git:remote -a your-project-name-2
If you've done the connection properly you'll receive the following output:
set git remote heroku to https://git.heroku.com/your-project-name-2.git
For my case, I was renaming my github repository.
You can find it in your repository settings then just rename it, it appears in the first place.
Then you can continue with git init again to re-initiate your existing git repository and then set your heroku remote with your heroku apps new name heroku git:remote -a YOUR_APP_NAME
If the app belongs to a team that you participate in, you have to specify the team option in the commands to see the app:
E.g:
heroku apps -t <team name>
or
heroku ps:scale web=1 --app worldofwarcraft-api -t <team name>

Edit files on Heroku

I'm stuck at this simple task.
I have some configuration files that should be ignored by Git. But after commit to Heroku, I always get Application Error.
If I ignore those files then I have no way to get around the situation, but adding them to Git is definitely not a good idea.
Is there any way to ssh into Heroku server, I found no instructions on Heroku?
You can run a bash shell for your heroku app by doing this. Note that it will spin up another dyno, which will shut down when you exit the shell:
heroku run bash

heroku - how to see all the logs

I have a small app on heroku. Whenever I want to see the logs I go to the command line and do
heroku logs
That only shows me about 100 lines. Is there not a way to see complete logs for our application on heroku?
Update (thanks to dawmail333):
heroku logs -n 1500
or, to tail the logs live
heroku logs -t
Heroku log documentation
If you need more than a few thousand lines you can Use heroku's Syslog Drains
Alternatively (old method):
$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
Logging has greatly improved in heroku!
$ heroku logs -n 500
Better!
$ heroku logs --tail
references: http://devcenter.heroku.com/articles/logging
UPDATED
These are no longer add-ons, but part of the default functionality :)
Heroku treats logs as time-ordered streams of events. Accessing *.log files on the filesystem is not recommended in such an environment for a variety of reasons.
First, if your app has more than one dyno then each log file only represents a partial view into the events of your app. You would have to manually aggregate all the files to get the full view.
Second, the filesystem on Heroku is ephemeral meaning whenever your dyno is restarted or moved (which happens about once a day)the log files are lost. So you only get at most a day's view into that single dyno's logs.
Finally, on the Cedar stack running heroku console or even heroku run bash does not connect you to a currently running dyno. It spawns a new one specifically for the bash command. This is called a one-off process. As such, you won't find the log files for your other dynos that are running the actual http processes on the one spawned for heroku run.
Logging, and visibility in general, is a first-class citizen on Heroku and there are several tools that address these issues. First, to see a real-time stream of application events across all dynos and all layers of the application/stack use the heroku logs -t command to tail output to your terminal.
$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...
This works great for observing the behavior of your application right now. If you want to store the logs for longer periods of time you can use one of the many logging add-ons that provide log retention, alerting and triggers.
Lastly, if you want to store the log files yourself you can setup your own syslog drain to receive the stream of events from Heroku and post-process/analyze yourself.
Summary: Don't use heroku console or heroku run bash to view static log files. Pipe into Heroku's stream of log events for your app using heroku logs or a logging add-on.
Well, the above answers are very helpful it will help you to view from the command line. Whereas if you want to check from GUI so you have to log into your Heroku account and then select your application and finally click on view logs
Follow on Heroku logging
To view your logs we have:
logs command retrives 100 log lines by default.
heroku logs
show maximum 200 lines, --num (or -n) option.
heroku logs -n 200
Show logs in real time
heroku logs --tail
If you have many apps on heroku
heroku logs --app your_app_name
Also see individual streams/filters.
E.g tail only your application logs
heroku logs --source app -t
Or see only the router logs
heroku logs --ps router
Or chain them together
heroku logs --source app --ps worker
So good..
You can access your log files using Heroku's Command Line
Interface (CLI Usage).
If Heroku's CLI is installed and you know your application name (like https://myapp.herokuapp.com/), then you can run the following command:
heroku logs --tail --app=myapp
You can also access the logs in a real-time stream using:
heroku logs --source app --tail --app=myapp
If the logs tell you something like this:
npm ERR! A complete log of this run can be found in:
npm ERR! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Then you can also access them using the bash terminal via Heroku CLI:
heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
heroku logs -t shows us the live logs.
Might be worth it to add something like the free Papertrail plan to your app. Zero configuration, and you get 7 days worth of logging data up to 10MB/day, and can search back through 2 days of logs.
My solution is to get complete log the first time the application start, like:
heroku logs -n 1500 > log
then add fgrep -vf to keep it up to date, like:
heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log
for continuous logging, just iterate it using watch for every x minutes (or seconds).
You need to use -t or --tail option and you need to define your heroku app name.
heroku logs -t --app app_name
for WAR files:
I did not use github, instead I uploaded directly, a WAR file ( which I found to be much easier and faster ).
So the following helped me:
heroku logs --app appname
Hope it will help someone.
You need to have some logs draining implemented and should be draining your logs there, to see all of the logs (manage historical logs as well):
First option - Splunk can be used: you can drain all your logs like:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name
And then login into your splunk server and search for any number of logs. I am using Splunk and this is working perfectly fine for me.
Second option - You can purchase add on to your App, like given below: (I haven't used these options, however these are the available ones).
Timber.io
Sumo Logic
LogEnteries
Log DNA
Papertrail
You can also have a look at below options: If you want to have your
logs in JSON format, as it will help if your are pushing your logs to
external system like Splunk/ELK, it would become easy (performance
wise also) to search in JSON.
https://github.com/goodeggs/heroku-log-normalizer
It is not having Readme.md, but some explanation is given at https://github.com/goodeggs/bites/issues/20
Lastly
And you can always use below command as mentioned by other users already:
The following command will tail the generating logs on heroku
heroku logs -t -a <app_name>
The following comand will show the 1000 number of lines of logs from heroku
heroku logs -n 1000 -a <app_name>
Note only 1500 latest lines of logs are available and rest of them gets deleted from heroku dyno.
To see the detailed log you need to put two lines in the production.rb file:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG
and then by running
heroku logs -t
you can see the detailed logs.
I prefer to do it this way
heroku logs --tail | tee -a herokuLogs
You can leave the script running in background and you can simply filter the logs from the text file the way you want anytime.
heroku logs -t shows us the live logs.
heroku logs -n 1500 for specific number of logs
But still I would recommend to use paper trail add-on which have certain benefits and has free basic plan.
I suggest using an addon, I use Logentries. To use it, run in your command line:
heroku addons:create logentries:le_tryit
(that command creates the addon for a free account but clearly you can upgrade if you want)
Logentries allows you to save up to 5GB of log volume per month. That info is searchable by their command search within the last 7 days and it has real-time alerts.
So to answer your question, by using this addon you ensure that your logs aren't lost anymore when you reach the 1500 lines that Heroku saves by default.
Hope this helps! Have a great day!
You can use
heroku logs -n 1500
But this is not a recommended approach(in other word doesn't show you the real picture)
I would suggest you plug some logging tool. ( sumoLogic, paper trail n all ) as an add-on
They all have a free version( with few limitations, though enough for a small app or dev env, which will provide good insight and tool to analyze logs )
I was running into a situation where in my apps' dashboard, when I went to:
More > View logs
I wouldn't get an output, just hung...
So I did a google and found this:
Heroku CLI plugin to list and create builds for Heroku apps.
I installed it and ran:
heroku builds -a example-app /* Lists 10 most recently created builds for example-app, that's where you get the id for the next step*/
Then enter:
heroku builds:output your-app-id-number -a example-app
And that's it, you should get back what you normally see in the dashboard GUI or locally.
Hope this helps someone like it did me!
If your code is in python,
You can use the heroku3 pip library to access the logs for your Heroku app.
First, you'll need to install the library by running.
pip install heroku3
Then, you can use the following code to access your logs:
import heroku3
# Connect to the Heroku API
conn = heroku3.from_key('YOUR_API_KEY')
# Get the app you want to access logs for
app = conn.app('YOUR_APP_NAME')
# Access the logs
logs = app.logs().stream()
# Print the logs
for line in logs:
print(line)
Make sure to replace YOUR_API_KEY and YOUR_APP_NAME with the appropriate values for your app.
Additionally, you can use the heroku logs --tail
command in your command line to stream the logs for your Heroku app. Make sure you are logged in and you have the access to the app.
For cedar stack see:
https://devcenter.heroku.com/articles/oneoff-admin-ps
you need to run:
heroku run bash ...

Resources