Passer de SQLite3 à PostgreSQL dans un nouveau projet Ruby on Rails

Ceci est un résumé des étapes pour changer la base de données d'un nouveau projet créé avec Ruby on Rails.

environnement

Raisons de changer PostgreSQL de SQLite

La base de données standard de Ruby on Rails est SQLite3 </ b>, mais lors du déploiement sur Heroku, SQLite3 génère une erreur. </ b> Si vous passez à PostgreSQL au moment de rails new, vous pouvez éviter la migration des données plus tard.

Prêt à utiliser Postgres

Installez Homebrew sur Mac

Installez d'abord le xcode requis pour installer le Homebrew.

Installer xcode

xcode-select --install

Installez Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Cliquez ici pour la page officielle: Homebrew

Installez postgres sur mac via brew

Vous pouvez télécharger la dernière version stable en spécifiant postgresql.

brew install postgresql

Initialisation Postgres

Mettre à jour .bash_profile

ECHO 'export PGDATA=/usr/local/var/postgres' >> .bash_profile

Recharger .bash_profile

source ~/.bash_profile

Créer un utilisateur

Créez un utilisateur pour gérer la base de données.

 createuser <username>

Utiliser Postgres dans les projets Rails

Changer la partie qui est SQLite3 dans Gemfile en PostgreSQL

Mettez à jour le Gemfile et remplacez la description de SQLite3 par PostgreSQL.

Changer avant

Gemfile.rb


# Use sqlite3 as the database for Active Record
gem 'sqlite3', '~> 1.4'

Après le changement

Gemfile.rb


# Use Postgres as the database for Active Record
gem 'pg'

Installez la gemme avec l'installation groupée.

bundle install

Modifiez database.yml pour configurer la base de données

app/config/database.yml


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

 development:
   <<: *default
   database: myapp_dev #Nom de base de données arbitraire

 test:
   <<: *default
   database: myapp_sandbox #Nom de base de données arbitraire

 production:
   <<: *default
   database: myapp_production #Nom de base de données arbitraire
   username: <username> #Tout nom d'utilisateur
   password: request.env['DB_PASSWORD'] #Tout mot de passe
   adapter: postgresql
   encoding: unicode
   pool:  <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

Écrivez le mot de passe en .env

Si vous écrivez le mot de passe tel qu'il est dans database.yml, le mot de passe sera exposé lorsque vous le mettrez à jour vers GitHub avec Public. Créons un fichier .env pour gérer les variables d'environnement. Ajoutez le fichier .env à .gitignore pour l'empêcher d'être téléchargé sur GitHub.

.env


DB_PASSWORD = '<password>'

.gitignore


.env

Créer une base de données

bundle exec rails db:create

Si le message suivant apparaît, PostgreSQL a terminé la création de la base de données.

Created database 'myapp_dev'
Created database 'myapp_sandbox'

Recommended Posts