Heroku redis/sidekiq Connection timed out - user specified timeout error - heroku

This is an issue that happened after upgrading my Redis instance version on Heroku using heroku redis:upgrade
The error happened when Sidekiq tried to connect to Redis:
Connection timed out - user specified timeout
After reading this guide:
https://github.com/mperham/sidekiq/wiki/Using-Redis#life-in-the-cloud
I thought the problem might be in the network connection, so I tried increasing the network timeout in config/initializers/sidekiq.rb like this:
config.redis = { network_timeout: 5 }
Unfortunately this did not help, it only increased the time that it takes to create the connection, but the same error was still occurring in the end.

I noticed that after upgrading the Redis instance version, Heroku had not updated the REDIS_URL config var to match the new redis url.
So, the URL in the config var:
heroku config:get REDIS_URL
was different from the one returned by:
heroku redis:credentials
So my solution was as per the following guide:
https://devcenter.heroku.com/articles/managing-heroku-redis-using-cli#redis-credentials
to reset Redis the credentials:
heroku redis:credentials --reset
With this command, new credentials are created for the Redis instance and the related config vars on the Heroku application are automatically updated.

Related

How to connect to Heroku postgres db from WSL2?

I have a flask app running on Heroku with postgres database.
When trying to run the app localy on WSL2, the app runs, but when there is interaction with the db it curshes with the following error:
connection to server at "x-x-x-x-169.compute-1.amazonaws.com" (x.xxx.xxx.169), port 5432 failed: FATAL: database "xxxxxx828vkthi
" does not exist
(I have replaced the numbers with x)
I have opened port 5432 on windows, but still the same error appear.
Any suggestions on how to do it?
My setup on the flask app is
app = Flask(__name__)
DATABASE_URI = os.environ['DATABASE_URL']
DATABASE_URI= DATABASE_URI[:8]+'ql' + DATABASE_URI[8:]
engine = create_engine(DATABASE_URI)
db=scoped_session(sessionmaker(bind=engine))
Nothing should prevent this from working on the Heroku side. Just make sure to always use the connection information provided by DATABASE_URL (it can change at any time) and to use sslmode=require. You can get the current value of the DATABASE_URL by running
heroku config:get DATABASE_URL
Since this is an outbound connection you shouldn't have to open any ports on WSL or Windows. Out of the box, this outbound connection should work.

Unable to connect to Heroku Postgres from Play 2.3

I have a Play 2.3 app in Java. For this app, I am able to connect to local Postgres server.
But I am unable to connect to Heroku Postgres server.
I have following settings in my application.conf:
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://ec2test.amazonaws.com:5432/rwerwerwer"
db.default.user=eerwerwerer
db.default.password="5345fdwfdsvfvsdfsdfds"
I am getting following error:
Caused by: org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for ho
st "172.56.17.147", user "eerwerwerer", database "rwerwerwer", SSL off
From PgAdim III, I am able to successful connect to Heroku database.
While adding heroku config, I got:
**! No app specified.**
Follow these steps.
Things to remember:
Use Heroku commands from inside your main directory.
Use database connection as:
db.default.driver=org.postgresql.Driver
db.default.url=${?DATABASE_URL}
No need for username and password.
No need for Procfile.

Heroku Database Connection Properties

I'm trying to perform a relatively trivial task: I want to connect to a Heroku database. I have created the database and have been issued credentials from the Heroku site. However, when I try to connect to this database using anything besides the terminal 'heroku' command line client, I get fatal errors or cannot connect errors.
The two tools that I tried to connect with outside of the Heroku terminal application are: Navicat and IntelliJ.
The error that I receive in Navicat when trying to connect to the database is:
could not connect to server: Host is down
Is the server running on host "ec2-107-21-112-215.compute-1.amazonaws.com" and accepting
TCP/IP connections on port 5432?
My connection settings are as follows:
Connection Name Heroku Dev Test
Host Name/IP Address ec2-107-21-112-215.compute-1.amazonaws.com
Port 5432
Navicat doesn't even seem to be making an attempt to connect to that hostname.
When I try to connect with IntelliJ, using the full credentials, I get the following error:
java.sql.SQLException: FATAL: no pg_hba.conf entry for host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off
Again, I'm using the credentials that the Heroku application provides me with when accessing my database on their website.
Has anyone ran into this Heroku connection issue before?
I also had the issue with the FATAL: no pg_hba.conf entry for host error message.
I solved the connection issue to my Heroku Postgres database by adding the following to my JDBC string: &ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory.
Example
jdbc:postgresql://host:port/database?user=username&password=secret&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
You will need the SSL option only if SSL is enabled for your Postgres database (which is the default).
Hint
If you want to check your database connection properties, then just run the following command with the Heroku Toolbelt: heroku pg:info --app your-heroko-appname (make sure that you have Postgres insalled to run this command in your terminal)
The pg:info command will also tell you that sslmode is set to require.
To test the database connection I recommend SQL Power Architect as it is the tool which I was using to check my solution.
Heroku provides this information for connecting from external sources:
https://devcenter.heroku.com/articles/heroku-postgresql#external-connections-ingress
The second error message indicates PostgreSQL is not configured to accept the connection you're trying to make. Given the information Heroku provides, a good guess is that you're not connecting with SSL. Try to enable that on your connection.
Here are instructions for using SSL with Navicat: http://mirror.navicat.com/manual/online_manual/en/navicat/rv_manual/ClientCert.html.
This may be helpful in configuring Intellij to use SSL: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely.
IntelliJ -> Datasources and Drivers
After you've configured the host, database and user details under the General tab switch to the Advanced tab and ensure that you've added the following:
ssl = true
sslfactory = org.postgresql.ssl.NonValidatingFactory
sslmode = require
You may consider setting a ENVIRONMENT CONFIG VARIABLE 'PGSSLMODE' to 'require' via Heroku's web interface or CLI.
Case: Postgres dB set up as a Heroku add-on and attached to app on a Heroku Dyno.
Heroku's instructions unfortunately leave out any mention of how to activate SSL, even though it is required for any dB tier starting with Standard-0 by default.
Follow all of the pg-copy or pg-upgrade steps (preferred approach depends on your version of Postgres) in Heroku instructions; however, before decommissioning the old database (if relevant) -- add the PGSSLMODE environment variable.
The instructions sufficiently cover how to promote the new database (and, consequently set the DATABASE_URL), so no changes/modifications to them should be required.
Wanted to help others who might run into this.
If you're supplying the Username and Password in seperate fields rather than on the command line, you need to use a ? between the database name and ssl=true and discard the first &
jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
That's the command line that finally allowed me to connect to a PostgreSQL database using SQL Power Architect
For those who might be using Spring Boot and having the configuration provided through the DATABASE_URL environment property (not system property), the suffix can be added to the property:
?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
and passed through with a slight modification to the config bean:
#Bean
public BasicDataSource dataSource() throws URISyntaxException {
URI dbUri = new URI(System.getenv("DATABASE_URL"));
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
StringBuilder dbUrl = new StringBuilder(128);
dbUrl.append("jdbc:postgresql://")
.append(dbUri.getHost()).append(":")
.append(dbUri.getPort())
.append(dbUri.getPath());
String query = dbUri.getQuery();
if (null != query && !query.isEmpty()) {
dbUrl.append("?").append(query);
}
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl(dbUrl.toString());
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
return basicDataSource;
}
I'm using node.js and was trying to run my knex migrations for my Heroku app. I tried appending ?sslmode=require to the connection URL but it didn't work. I added ?ssl=true instead and now it works perfectly.
Here's an example Heroku PostgreSQL connection URL that works:
postgres://user:password#ec2-12-34-56-78.compute-99.amazonaws.com:port/databasename?ssl=true
Add or edit the following line in your postgresql.conf file :
listen_addresses = '*'
Add the following line as the first line of pg_hba.conf. It allows access to all databases for all users with an encrypted password:
TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
Restart postgresql service:
net stop postgresql-9.0 & net start postgresql-9.0
(version should be based on your installation) -- On windows (run cmd as an administrator).
sudo service start postgresql -- On linux (or according to your linux distribution.)
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});

heroku pg:psql not working

I tried to connect to the Postgres database for my app on heroku by running the command "heroku pg:psql" and got the following error message:
psql: could not connect to server: Connection timed out (0x0000274C/10060)
Is the server running on host "URL.com"(IP address) and accepting
TCP/IP connections on port 5432?
I also tried to connect using Pgadmin and get the error:
Server doesn't listen. Is the server running on host "URL.com" (IP address) and accepting
TCP/IP connections on port 5432?
Can anyone tell me how to fix these errors and correctly connect to my database.
Thanks in advance!
Try this:
heroku pg:psql DATABASE_URL
As started to hint already using DATABASE_URL there are few more things to consider.
If you have multiple apps in Heroku it is always good to specify to what app you want to connect to where DB is added. Same applies if you have multiple databases to specify DB name (if it is something else than default DATABASE_URL).
Some examples how to connect:
-- Defining to what DB and app you want to connect to:
heroku pg:psql [lower case generated name] -a myapp
heroku pg:psql [lower case generated name] --app myapp
heroku pg:psql HEROKU_POSTGRESQL_[upper case generated name]_URL -a myapp
-- This will fall back to default DATABASE_URL part of your app:
heroku pg:psql -a myapp
Also to keep in mind as said here https://devcenter.heroku.com/articles/heroku-local#copy-heroku-config-vars-to-your-local-env-file:
Keep in mind that your deployed production app may be connecting to
different services than your local development app. For example, your
deployed production app might have a DATABASE_URL config var that
references a Heroku Postgres database, but your local app might have a
DATABASE_URL variable in the .env file that references your local
installation of Postgres.
Heroku guideline – https://devcenter.heroku.com/articles/heroku-postgresql#pg-psql (but it explains little about multi-database and multi-apps cases).
Heroku guideline for connecting externally - https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku
This answer might be silly, but it happened to me before. The internet connection I was in is blocking the connection on that port.

How fix number of connection for heroku staging DataBase

I'm using heroku to deploy my Rails 2.3.6 application.I'm using production Database backup for my staging server.But when i using this command for restart heroku.
heroku restart --app gentle-gorge-9319
after restart heroku when i reresh application home page i have this message in heroku logs
remaining connection slots are reserved for non-replication
superuser connections + heroku staging error
How i can increase connection pool for staging server.
Any help will be more appreciated...
Thanks

Resources