2012-04-01 16 views
2

Ich habe gerade angefangen, Rails zu studieren. Wenn ich "Rake db: migrate" versuche, trat der folgende Fehler auf.Rake db: Migration fehlgeschlagen

Rake abgebrochen! FATAL: Peer-Authentifizierung fehlgeschlagen für Benutzer „KT1“

es scheint, dass es mit database.yml etwas nicht in Ordnung ist, aber ich habe keine Ahnung, wie zu lösen. Bitte geben Sie mir einen Rat.


Vielen Dank für Ihren Kommentar und bearbeiten. Ich benutze postgresql (0.13.2). Meine Umgebung ist wie folgt. Ubuntu 11.10 Rubin 1.8.7 Rails 3.2.3 gem 1.8.21

database.yml wie unten.


# PostgreSQL. Versions 8.2 and up are supported. 
# 
# Install the pg driver: 
# gem install pg 
# On Mac OS X with macports: 
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config 
# On Windows: 
# gem install pg 
#  Choose the win32 build. 
#  Install PostgreSQL and put its /bin directory on your path. 
# 
# Configure Using Gemfile 
# gem 'pg' 
# 
development: 
    adapter: postgresql 
    encoding: unicode 
    database: kt1_development 
    pool: 5 
    username: kt1 
    password: 

    # Connect on a TCP socket. Omitted by default since the client uses a 
    # domain socket that doesn't need configuration. Windows does not have 
    # domain sockets, so uncomment these lines. 
    #host: localhost 
    #port: 5432 

    # Schema search path. The server defaults to $user,public 
    #schema_search_path: myapp,sharedapp,public 

    # Minimum log levels, in increasing order: 
    # debug5, debug4, debug3, debug2, debug1, 
    # log, notice, warning, error, fatal, and panic 
    # The server defaults to notice. 
    #min_messages: warning 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: postgresql 
    encoding: unicode 
    database: kt1_test 
    pool: 5 
    username: kt1 
    password: 

production: 
    adapter: postgresql 
    encoding: unicode 
    database: kt1_production 
    pool: 5 
    username: kt1 
    password: 

ich auch blanko mit Benutzername versucht. Dann wird der Fehler

kommt
rake aborted! 
FATAL: role "kenji" does not exist 

(Kenji ist mein Benutzername auf Ubuntu.)

+0

Können Sie Ihre 'database.yml' veröffentlichen? Blockieren Sie alle sensiblen Daten. Welchen Datenbanktyp (MySQL, PostgreSQL etc.) möchten Sie verwenden? – Alex

Antwort

3

Sie müssen zuerst create the user kt1, dann create the database und geben Sie dem Benutzer die Erlaubnis dazu.

Es gibt einen Weg Schienen lassen den Benutzer und Datenbank erstellen, aber in postgresql, ist es am besten, sie von Hand zu tun (IMHO)

+0

Danke, du hast Recht. Letzte Nacht habe ich versucht, zu tun, was du vorgeschlagen hast, und es geschafft. Es war nicht einfach, da ich ein Anfänger von Postgresql bin, also habe ich so viele Möglichkeiten ausprobiert, wie ich finden kann, und schließlich war ich erfolgreich. – kenzy66

+0

Gut zu helfen. :) –

0

Blick auf Ihre database.yml Datei, da die Datenbankadapter, möglicherweise einen Datenbanknamen, Benutzernamen und Passwort .

Der Adapter zeigt Ihnen, welche Datenbanksystem Sie verwenden, sqllite3, mysql2, was auch immer

Sehen Sie, wenn Sie manuell auf die Datenbank-System verbinden können Sie den Benutzernamen und das Kennwort ein, die in der database.yml enthalten sind. Sobald Sie den korrekten Benutzernamen und das richtige Passwort für die manuelle Verbindung ermittelt haben, aktualisieren Sie die Datei "database.yml" mit allen Änderungen und versuchen Sie es erneut.

8

Versuchen Sie, Ihre (/etc/postgresql/9.1/main/) pg_hba.conf Datei wie folgt zu ändern, die sich wandelnde Methode für lokale Benutzer von Peer zu Trust.

# Database administrative login by UNIX sockets 
local all   postgres       trust 

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 

# "local" is for Unix domain socket connections only 
local all   all        trust 
# IPv4 local connections: 
host all   all   127.0.0.1/32   md5 
# IPv6 local connections: 
host all   all   ::1/128    md5 
+0

Ja, das wird funktionieren. Vielleicht ist es eine gute Zeit, auch alle anderen Postgres-Authentifizierungsmethoden zu studieren. –

+0

Danke, Mann! Ich habe mehrere Stunden damit verbracht, dieses Problem zu bekämpfen. Dein Rat hat mir geholfen! – AntonAL

0

Dies geschieht, wenn die Anwendung mit SQLite intially gebaut wurde, und dann auf Postgres portiert, um auf Heroku gehostet werden.

Lauf rake db: migrate war liefert Ihnen folgenden errror

PGError (FATAL: role "rails" does not exist): error message.

Und rspec spec/und Harke Gurke nicht mit ähnlichen Fehlern.

die folgenden Schritte scheinen die Probleme zu lösen:

erstellen Schienen als Super User: createuser -s rails (Hinweis: Wenn Sie sich als DB Super-User nicht eingerichtet haben, werden Sie eine andere DB angeben müssen Benutzer, dies zu tun, wie es für mich AngelegtVon es Schienen -U postgres) waren

erstellen Sie die Datenbank mit dem Besitzer Schiene angegeben wie in database.yml.

createdb -O rails kt1 (wie in Schritt 1, wenn Sie benötigen Geben Sie einen anderen DB-Benutzer an, um dies zu tun, fügen Sie -U hinzu)

Nach diesem Rake db: migrate sollte rspec spec/und Rake Gurke erfolgreich ausgeführt werden.

Verwandte Themen