Wes Creations
Wes Creations

Reputation: 387

How to configure rails app so that local development and production deploys both working

I was coding my rails app with sqlite3 and all was fine.

Then I deployed to Heroku and had to change DB to Postgres. The only way I could get production deploy to work is by just having gem pg in the gem file, as opposed to have it in a :production group.

Anyway, when I try to configure app the following way,the app won't run locally anymore. What am I missing?

Gem File

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'sqlite3'
end

group :production do
 gem 'pg'
end

and here's my db.yml file

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: db/development.sqlite3

test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  adapter: postgresql
  database: db/production.sqlite3

Upvotes: 0

Views: 643

Answers (2)

rmlockerd
rmlockerd

Reputation: 4116

@praaveen's answer is absolutely correct, but just to expand slightly since his snippet of database.yml was just a relevant subset, not complete. In config/database.yml you specify the database configuration for each environment (dev, test, prod). That configuration does vary by the type of database as well, and specifically when moving from Sqlite3 to Postgres you need to change the database names, and add the username and password for each environment. So, the database.yml should look something like:

default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: dev-database
  username: whatever
  password: whatever

test:
... etc etc

Here's a blog article that covers what you need to change to switch from sqlite to Postgres in an existing project in more step-by-step fashion. Also note since you are using Heroku for production, the specification of database settings works a bit differently. See this for a description of how Heroku PG configuration works.

Upvotes: 1

praaveen V R
praaveen V R

Reputation: 1261

Production, it is working because of pg gem and postgresql adapter

database.yml

default: &default
  adapter: postgresql

production:
  <<: *default
  adapter: postgresql

gem file

group :production do
 gem 'pg'
end

In development it fails because of sqlite3 gem and postgresql adapter. Add right database gem. If postgresql then, gem 'pg' inside development group

database.yml

default: &default
  adapter: postgresql
  

development:
  <<: *default
  database: dev-database

gem file

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'pg'
end

Better switch to a single database.

This link may help to choose the right DB based on your requirement. Sqlite3 vs Postgres vs Mysql - Rails

Upvotes: 2

Related Questions