J'exécute mon développement sous Ubuntu 11.10 et RubyMine
Voici mes paramètres de développement pour le fichier database.yml: que RubyMine a créé pour moi
development:
adapter: postgresql
encoding: unicode
database: mydb_development
pool: 5
username: myuser
password:
lorsque j'essaie d'exécuter l'application, j'obtiens cette erreur ci-dessous. Il semble que je n'ai pas encore créé d'utilisateur "projet", mais comment puis-je créer un utilisateur et lui accorder une base de données dans postgres? Si tel est le problème, quel est l'outil recommandé à utiliser dans Ubuntu pour cette tâche? si ce n'est pas le problème, alors, s'il vous plaît des conseils.
Exiting
/home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `initialize': FATAL: Peer authentication failed for user "project" (PG::Error)
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `new'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `connect'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:303:in `new_connection'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:313:in `checkout_new_connection'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:237:in `block (2 levels) in checkout'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `loop'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `block in checkout'
from /home/sam/.rvm/rubies/Ruby-1.9.3-p0/lib/Ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:229:in `checkout'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:308:in `clear_cache!'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/railtie.rb:91:in `block (2 levels) in <class:Railtie>'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:418:in `_run__757346023__prepare__404863399__callbacks'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/application/finisher.rb:47:in `block in <module:Finisher>'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:30:in `instance_exec'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:30:in `run'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:55:in `block in run_initializers'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:54:in `each'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/initializable.rb:54:in `run_initializers'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/application.rb:136:in `initialize!'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/railtie/configurable.rb:30:in `method_missing'
from /home/sam/RubymineProjects/project/config/environment.rb:5:in `<top (required)>'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `block in require'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
from /home/sam/RubymineProjects/project/config.ru:4:in `block in <main>'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
from /home/sam/RubymineProjects/project/config.ru:1:in `new'
from /home/sam/RubymineProjects/project/config.ru:1:in `<main>'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands/server.rb:46:in `app'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands/server.rb:70:in `start'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands.rb:55:in `block in <top (required)>'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands.rb:50:in `tap'
from /home/sam/.rvm/gems/Ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/Rails/commands.rb:50:in `<top (required)>'
from /home/sam/RubymineProjects/project/script/Rails:6:in `require'
from /home/sam/RubymineProjects/project/script/Rails:6:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
Process finished with exit code 1
Si vous avez installé postresql sur votre serveur, hébergez simplement: localhost to database.yml, je le jette généralement autour de la mention pool: 5. Autrement, si ce n'est pas localhost, indiquez à cette application où trouver sa base de données.
development:
adapter: postgresql
encoding: unicode
database: kickrstack_development
Host: localhost
pool: 5
username: kickrstack
password: secret
Assurez-vous que vos informations d'identification d'utilisateur sont correctement définies en créant une base de données et en attribuant la propriété à l'utilisateur de votre application pour établir la connexion. Pour créer un nouvel utilisateur dans postgresql 9, exécutez:
Sudo -u postgres psql
définissez le mot de passe utilisateur postgresql si ce n'est pas le cas, il s'agit simplement d'un mot de passe de barre oblique inversée.
postgres=# \password
Créez un nouvel utilisateur et mot de passe et la nouvelle base de données de l'utilisateur:
postgres=# create user "guy_on_stackoverflow" with password 'keepitonthedl';
postgres=# create database "dcaclab_development" owner "guy_on_stackoverflow";
Maintenant, mettez à jour votre fichier database.yml après avoir confirmé la création de la base de données, de l'utilisateur, du mot de passe et défini ces privilèges. N'oubliez pas l'hôte: localhost.
C'est le moyen le plus infaillible de faire fonctionner votre application Rails avec postgres dans l'environnement de développementsous Ubuntu 13.10.
1) Créez l'application Rails avec Postgres YAML et 'pg' dans le Gemfile:
$ Rails new my_application -d postgresql
2) Donnez-lui une fonctionnalité CRUD. Si vous ne voyez que si postgres fonctionne, créez un échafaudage:
$ Rails g scaffold cats name:string age:integer colour:string
3) À partir de Rails 4.0.1
, l'option -d postgresql
génère un YAML qui n'inclut pas de paramètre d'hôte. J'ai trouvé que j'avais besoin de ça. Editez la section de développement et créez les paramètres suivants:
encoding: UTF-8
Host: localhost
database: my_application_development
username: thisismynewusername
password: thisismynewpassword
Notez que le paramètre database
concerne une base de données qui ne se ferme pas encore, et que username
et password
sont les informations d'identification d'un rôle qui n'existe pas non plus. Nous les créerons plus tard!
Voici à quoi devrait ressembler config/database.yml
(pas de honte en copypast: D):
development:
adapter: postgresql
pool: 5
# these are our new parameters
encoding: UTF-8
database: my_application_development
Host: localhost
username: thisismynewusername
password: thisismynewpassword
test:
# this won't work
adapter: postgresql
encoding: unicode
database: my_application_test
pool: 5
username: my_application
password:
production:
# this won't work
adapter: postgresql
encoding: unicode
database: my_application_production
pool: 5
username: my_application
password:
4) Démarrer le shell postgres avec cette commande:
$ psql
4a) Vous pouvez obtenir cette erreur si votre utilisateur actuel (comme dans votre ordinateur) n’a pas le rôle correspondant dans l’administration postgres.
psql: FATAL: role "your_username" does not exist
Maintenant, je n’ai installé que postgres une seule fois, j’ai peut-être tort, mais je pense que postgres crée automatiquement un rôle d’administration avec les mêmes informations d’identité que l’utilisateur sur lequel vous avez installé postgres.
4b) Cela signifie donc que vous devez utiliser l’utilisateur qui a installé postgres pour utiliser la commande psql et démarrer le shell:
$ Sudo su postgres
Et puis courir
$ psql
5) Vous saurez que vous êtes dans le shell postgres car votre terminal ressemblera à ceci:
$ psql
psql (9.1.10)
Type "help" for help.
postgres=#
6) En utilisant la syntaxe postgresql, créons l'utilisateur que nous avons spécifié dans config/database.yml
'/ development section:
postgres=# CREATE ROLE thisismynewusername WITH LOGIN PASSWORD 'thisismynewpassword';
Maintenant, il y a quelques subtilités ici alors allons-y.
Vous devriez voir ceci dans votre terminal:
postgres=#
CREATE ROLE
postgres=#
Cela signifie "ROLE CREATED", mais les alertes de postgres semblent adopter les mêmes conventions impératives de git hub.
7) Maintenant, toujours dans le shell postgres, nous devons créer la base de données avec le nom que nous avons défini dans le YAML. Attribuez à l'utilisateur créé à l'étape 6 son propriétaire:
postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;
Vous saurez si vous avez réussi car vous obtiendrez le résultat:
CREATE DATABASE
8) Quittez le shell postgres:
\q
9) Maintenant le moment de vérité:
$ Rails_ENV=development rake db:migrate
Si vous obtenez ceci:
== CreateCats: migrating =================================================
-- create_table(:cats)
-> 0.0028s
== CreateCats: migrated (0.0028s) ========================================
Félicitations, postgres fonctionne parfaitement avec votre application.
9a) Sur mon ordinateur local, je continuais à avoir une erreur de permission. Je ne m'en souviens pas exactement, mais c'était une erreur dans le sens de
Can't access the files. Change permissions to 666.
Bien que je conseille de réfléchir très soigneusement à la définition récursive de privilèges d'écriture sur une machine de production, localement, j'ai octroyé à l'ensemble de l'application les privilèges d'écriture en lecture suivants:
9b) Montez d'un niveau de répertoire:
$ cd ..
9c) Définissez les autorisations du répertoire my_application et de tout son contenu sur 666:
$ chmod -R 0666 my_application
9d) Et relancez la migration:
$ Rails_ENV=development rake db:migrate
== CreateCats: migrating =================================================
-- create_table(:cats)
-> 0.0028s
== CreateCats: migrated (0.0028s) ========================================
Quelques trucs et astuces si vous perdez votre temps
Essayez-les avant de redémarrer toutes ces étapes:
L'utilisateur mynewusername ne dispose pas des privilèges permettant à CRUD d'accéder à la base de données my_app_development
? Supprimez la base de données et créez-la à nouveau avec mynewusername en tant que propriétaire:
1) Démarrer le shell postgres:
$ psql
2) Supprimez la base de données my_app_development
. Faites attention! Drop signifie totalement supprimer!
postgres=# DROP DATABASE my_app_development;
3) Recréez un autre my_app_development
et faites de monnewusername le propriétaire:
postgres=# CREATE DATABASE my_application_development OWNER mynewusername;
4) Quittez le shell:
postgres=# \q
L'utilisateur mynewusername
ne peut pas se connecter à la base de données? Vous pensez avoir écrit un mauvais mot de passe dans le fichier YAML et vous ne vous souvenez plus du mot de passe que vous avez entré avec le shell postgres? Modifiez simplement le rôle avec le mot de passe YAML:
1) Ouvrez votre YAML et copiez le mot de passe dans votre presse-papiers:
development:
adapter: postgresql
pool: 5
# these are our new parameters
encoding: UTF-8
database: my_application_development
Host: localhost
username: thisismynewusername
password: musthavebeenverydrunkwheniwrotethis
2) Démarrer le shell postgres:
$ psql
3) Mettez à jour le mot de passe de mynewusername
. Collez le mot de passe et n'oubliez pas de le mettre entre guillemets:
postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;
4) Quittez le shell:
postgres=# \q
Vous essayez de vous connecter à localhost via un visualiseur de base de données tel que Dbeaver, et vous ne savez pas quel est le mot de passe de votre utilisateur postgres? Changez-le comme ça:
1) Exécutez passwd
en tant que superutilisateur:
$ Sudo passwd postgres
2) Entrez le mot de passe de votre compte pour Sudo
(rien à voir avec postgres):
[Sudo] password for starkers: myaccountpassword
3) Créez le nouveau mot de passe du compte postgres:
Enter new UNIX password: databasesarefun
Retype new UNIX password: databasesarefun
passwd: password updated successfully
Vous obtenez ce message d'erreur ?:
Run `$ bin/rake db:create db:migrate` to create your database
$ rake db:create db:migrate
PG::InsufficientPrivilege: ERROR: permission denied to create database
4) Vous devez donner à votre utilisateur la possibilité de créer des bases de données. Depuis le shell psql:
ALTER ROLE thisismynewusername WITH CREATEDB
Pour solution permanente:
Le problème est avec votre pg_hba. Cette ligne:
local all postgres peer
Devrait être
local all postgres md5
Redémarrez ensuite votre serveur postgresql après avoir modifié ce fichier.
Si vous êtes sur Linux, la commande serait
Sudo service postgresql restart
J'étais confronté au même problème sur la machine Ubuntu, j'ai donc supprimé cette erreur en suivant certaines étapes. Basculer vers l'utilisateur postgres
$ Sudo su - postgres
il vous demandera un mot de passe et le mot de passe par défaut est postgres
Après avoir basculé l'utilisateur sur postgres, ouvrez la console psql
$ psql
alors vérifiez la version de postgres si plusieurs versions sont disponibles
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
Maintenant ouvert postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
9.1
est la version supérieure du formulaire de commande
et remplacer
local all postgres peer
à
local all postgres md5
Sudo service postgresql restart
J'écris aussi des étapes sur mon blog
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
Vous pouvez aller dans votre fichier /var/lib/pgsql/data/pg_hba.conf et ajouter la confiance à la place de Ident Cela a fonctionné pour moi.
local all all trust
Host all 127.0.0.1/32 trust
Pour plus de détails, reportez-vous à ce problème L’authentification d’identité a échoué pour l’utilisateur
Ajouter "Host: locahost" était la magie pour moi
development:
adapter: postgresql
database: database_name_here
Host: localhost
username: user_name_here
Si vous recevez ce message d'erreur (Peer authentication failed for user (PG::Error)
) lors de l'exécution de tests unitaires, assurez-vous que la base de données de test existe.