Rails Deploy using Elastic Beanstalk - Can't convert array into string - ruby-on-rails

I'm trying to perform a deploy a rails app on EC2 using ElasticBeanstalk, but I'm having some troubles. I was able to perform every step needed on my computer following Amazon's tutorial (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Ruby_rails.html).
After deploying the app, I keep receiving this error passenger error on my server:
At first I tough this could be somewhat related to my config.yml file, so, here is how it is now:
production:
adapter: mysql2
encoding: utf8
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%=['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME']%>
port: <%= ENV['RDS_PORT'] %>
Any ideas on why could be happening?

Your password looks a lot like an array to me. I think you might want password: <%= ENV['RDS_PASSWORD'] %>

Related

How to encrypt environment variables in Rails <= 4

What is the best way to encrypt and use by decrypting ENV variables whenever needed.
Example config/database.yml
development:
adapter: mysql2
encoding: utf8
host: <%= ENV['DB_HOST'] %>
database: <%= ENV['DB'] %>
pool: 5
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
and .env has
DB_HOST=test.com
DB=testapp_db
DB_USERNAME=test_db_user
DB_PASSWORD=test_password_hard
My question is I want to encrypt DB_PASSWORD=test_password_hard to something like DB_PASSWORD=xadbcxedaxdcda and decrypt ENV['DB_PASSWORD'] while using.
I know Rails 5.2 onwards we can encrypt and use the credentials
Is there a way to achieve this in older rails version <= 4?

Why do I get this error "bad URI(is not URI?)" in puma.stderr.log on my ec2 machine

When start puma on my ec2 machine, I get this error: bad URI(is not URI?): <%= ENV['DATABASE_URL'] %> (URI::InvalidURIError) because of the database.yml I don't know why when I replace the embedded ruby code of the url with the real url the app works fine.
My database.yml:
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
port: 5432
development:
<<: *default
database: <%= ENV['DATABASE_NAME'] %>
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
I use dotenv gem and I load the environment variables from another file out of my project directory.
Also, know that when I open the rails console on my ec2 machine I can connect to the database without any problem.
Can anyone help me with this problem?
I have find the answer in another stackoverflow question. Tproblem was that the database.yml was not accepting erb. So, I tried to do like the answer of the previous question and it worked fine

Having a lot of trouble connecting to Cloud SQL Postgres in rails

I have configured by database.yml file according to this guide but it always comes back the error:
Error in Compute Engine
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/cloudsql/[YOUR_INSTANCE_CONNECTION_NAME]/.s.PGSQL.5432"?
I have whitelisted the network of 0.0.0.0/0 and also tried this guide where you install the cloud sql proxy, but still no luck.
database.yml
production:
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
database: databse-name
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
database: <%= ENV['DATABASE'] %>
host: <%= ENV['DATABASE_HOST'] %>
sslca: config/ssl/server-ca.pem
sslcert: config/ssl/client-cert.pem
sslkey: config/ssl/client-key.pem

Can't connect to PostgreSQL with Rails and Capistrano

I'm trying to deploy my Rails 5 application using Postgres to a VPS via Capistrano. It keeps failing, though - giving me a PG::ConnectionBad: FATAL: password authentication failed for user 'sys_user'.
The relevant settings of my database.yml are:
production:
<<: *default
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>
All these environment variables have been set in /etc/environment - this is definitely the case because it's picking up the RDS_USERNAME as sys_user. The password of the database is the same as the variable RDS_PASSWORD. The port, hostname etc. are all the same also.
I'm stumped. Please help.
Where is the Postgres instance running? I'm guessing that you're trying to migrate an application from Elastic Beanstalk to a non-Amazon host. If that's the case, and your Postgres instance is not actually RDS, you might need to enable password authentication in your config file.
Documentation on Postgres configuration can be found here; I suspect you might need to change ident to md5.

Provide SSL certificate to PostgreSQL in a Rails app

I have a Rails app on Elastic Beanstalk using an Amazon RDS PostgreSQL instance.
I'd like pg to use SSL to connect to this DB.
Following http://docs.aws.amazon.com/AmazonRDS/[...], I saved rds-combined-ca-bundle.pem at /config/ca/rds.pem and my database.yml looks like this:
production:
adapter: postgresql
database: <%= ENV['DB_NAME'] %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
host: <%= ENV['DB_ADDRESS'] %>
port: <%= ENV['DB_PORT'] %>
sslmode: 'require'
sslrootcert: 'config/ca/rds.pem'
But I have no idea if it's really using SSL: I can change sslrootcert path to anything, and my app is still up. What am I missing?
In your database.yml you have to use sslmode: 'verify-full' instead of sslmode: 'require' in order to verify the instance endpoint against the endpoint in the SSL certificate. This way the certificate is used.

Resources