J'essaie de configurer une base de données postgres dans une application Rails dans Cloud9.
J'ai suivi les instructions ici: https://docs.c9.io/setting_up_postgresql.html et de configurer une base de données appelée cc_database.
Mon fichier database.yml ressemble à ceci:
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: postgres
password: password
Quand j'exécute rake db: setup j'obtiens l'erreur suivante:
PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"
Je suis assez nouveau pour tout cela, alors tout conseil serait très apprécié.
Effectuez les étapes suivantes:
Créez un nouveau nom d'utilisateur et mot de passe pour postgresql sur cloud9:
$ Sudo service postgresql start
$ Sudo sudo -u postgres psql
postgres=# CREATE USER username SUPERUSER PASSWORD 'password';
postgres=# \q
Créez des variables ENV sur cloud9:
$ echo "export USERNAME=username" >> ~/.profile
$ echo "export PASSWORD=password" >> ~/.profile
$ source ~/.profile
Mon database.yml pour Rails 4.2.0 sur cloud9:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
username: <%= ENV['USERNAME'] %>
password: <%= ENV['PASSWORD'] %>
Host: <%= ENV['IP'] %>
development:
<<: *default
database: sample_app_development
test:
<<: *default
database: sample_app_test
production:
<<: *default
database: sample_app_production
Inclure la gem pg
dans Gemfile et installer:
gemme 'pg', '~> 0.18.2'
$ bundle install
Mise à jour template1 postgresql pour database.yml sur cloud9:
postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
postgres=# DROP DATABASE template1;
postgres=# CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
postgres=# \c template1
postgres=# VACUUM FREEZE;
postgres=# \q
Depuis la ligne de commande:
bundle exec rake db:create
Le postgresql dans cloud9 est configuré pour s'authentifier avec peer lors de la connexion localhost. Ainsi, la résolution rapide consiste à changer l'utilisateur de votre database.yaml en utilisateur actuel. Dans mon cas, le nom d'utilisateur est Ubuntu. Pour voir votre utilisateur actuel, utilisez la commande
$ echo $USER
Donc, une liste de commande dans le terminal est.
$ Sudo su - postgres
$ createuser ubuntu -dslP
$ Enter password for new role: **same password from your yaml file**
$ Enter it again:
Définissez votre fichier yaml comme ceci
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: ubuntu
password: password
Maintenant tu peux courir
rake db:create
rake db:migrate
Au moment de la rédaction, PostgreSQL est pré-installé dans Cloud9, vous n’avez donc pas besoin de l’installer vous-même. Cependant, il ne s'exécute pas par défaut et vous devrez donc le démarrer avec cette commande dans le terminal:
Sudo service postgresql start
Remplacez le mot de passe PostgreSQL par 'password' (ou choisissez un autre mot de passe):
Sudo sudo -u postgres psql
# This will open the psql client.
# Type \password and press enter to begin process
# of changing the password:
postgres=# \password
# Type your new password (e.g. "password") and press enter twice:
Enter new password:
Enter it again:
# Password changed, quit psql with \q
postgres=# \q
Editez votre config/database.yml
pour être:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
# Important configs for cloud9, change password value
# to what you entered in the previous psql step.
template: template0
username: ubuntu
password: password
development:
<<: *default
database: your_app_name_development
test:
<<: *default
database: your_app_name_test
production:
<<: *default
database: your_app_name_production
username: your_app_name
password: <%= ENV['YOUR_APP_NAME_DATABASE_PASSWORD'] %>
(Notez que les configurations template
, username
et password
de la section default
ci-dessus sont essentielles).
Ajoutez la gemme pg
à votre Gemfile
:
gem 'pg'
Exécutez bundle install
.
Supprimez la gem sqlite de votre Gemfile
(et éventuellement, supprimez les fichiers db/*.sqlite3
).
Créez la base de données, chargez schema.rb et créez la base de données à l'aide de la tâche db:setup
:
bundle exec rake db:setup
# Run bin/rake -AD db to see all db-related tasks
Démarrez ou redémarrez votre application Rails et vérifiez qu’elle fonctionne.
Notez que les données non initiales de votre ancienne base de données sqlite ne seront pas présentes dans la nouvelle base de données.
Si vous souhaitez utiliser le client psql pour interagir directement avec PostgreSQL, exécutez psql
ou bin/Rails db
dans le terminal.
Utilisez le nom d'utilisateur "Ubuntu" avec un mot de passe vide. Mon database.yml ressemble à ceci:
développement:
adaptateur: postgresql
codage: unicode
base de données: myflix_development
piscine: 5
nom d'utilisateur: ubuntu
mot de passe:
tester:
adaptateur: postgresql
codage: unicode
base de données: myflix_test
piscine: 5
nom d'utilisateur: ubuntu
mot de passe:
S'il se plaint alors que le mot de passe est incorrect, essayez de le modifier en suivant les instructions de Cloud9:
Dans la ligne de commande, tapez: Sudo sudo -u postgres psql
postgres = # \password
Entrez le nouveau mot de passe: leave it blank and press enter
Entrez-le à nouveau: leave it blank and press enter
postgres = # \q
Je suis assez nouveau pour ça. J'espère que ça marche!
Trouvé la solution. Nécessaire pour éditer le fichier pg_hba.conf pour changer l'authentification d'homologue en md5 comme ceci:
local postgres postgres md5
Il est difficile de trouver le fichier car il est uniquement accessible via le terminal dans cloud9. Vous ne pouvez pas le trouver dans l'arborescence de fichiers.
Si vous tapez ce qui suit dans postgres, il vous montrera l'emplacement
SHOW hba_file;
Vous pouvez ensuite rechercher et éditer in vim via le terminal.
Une version courte lorsque vous avez l'application Rails avant de créer des bases de données:
ajouter la gemme 'pg' enlever la gemme sqlite3
$ bundle install
$ gem install pg
Ensuite,
$Sudo service postgresql start
$psql -c "create database myapp_development owner=ubuntu"
selon https://community.c9.io/t/how-do-i-set-up-postgresql-on-c9-for-my-Rails-app/2614/4
Changer myapp pour quelque nom que ce soit. Ensuite, copiez-collez ci-dessous, en changeant myapp pour n’importe quel nom.
/myapp/config/database.yml
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: ubuntu
password:
timeout: 5000
En tant que commentaires ci-dessus, aucun mot de passe n'est requis, nom d'utilisateur peut rester ubuntu.
$rake db:migrate
Si vous utilisez heroku, vous n’avez pas besoin de la section production de database.yml