我刚刚开始学习Rails。 当我尝试“rake db:migrate”时,发生以下错误。
耙子流产了! 致命:用户“kt1”的对等身份验证失败
似乎database.yml有问题,但我不知道如何解决。 请给我一个建议。
非常感谢您的评论和编辑。我正在使用postgresql(0.13.2)。我的环境如下。 Ubuntu 11.10 Ruby 1.8.7 Rails 3.2.3 宝石1.8.21
database.yml如下。
# 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:
我也尝试使用空白的用户名。然后错误来了
rake aborted!
FATAL: role "kenji" does not exist
(kenji是我在Ubuntu上的用户名。)
答案 0 :(得分:8)
尝试像这样修改您的(/etc/postgresql/9.1/main/
)pg_hba.conf
文件,将本地用户的方法从对等方更改为信任方。
# 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
答案 1 :(得分:3)
您需要先create the user kt1,然后create the database并授予用户权限。
有一种方法可以让rails创建用户和数据库,但是在postgresql中,最好是手工完成(恕我直言)
答案 2 :(得分:0)
查看你的database.yml文件,里面会有数据库适配器,可能是数据库名,用户名和密码。
适配器告诉您使用的是哪个数据库系统,sqllite3,mysql2,无论
查看是否可以使用database.yml中包含的用户名和密码手动连接到该数据库系统。找到正确的用户名和密码进行手动连接后,请更新database.yml并进行任何更改,然后重试。
答案 3 :(得分:0)
当应用程序是使用sqlite构建时,会发生这种情况,然后移植到Postgres以便在Heroku上托管。
运行rake db:migrate会给你以下错误
PGError (FATAL: role "rails" does not exist ): error message.
并且rspec spec /和rake黄瓜失败并出现类似错误。
以下步骤似乎可以解决问题:
以超级用户身份创建rails:
createuser -s rails
(注意:如果您没有将自己设置为数据库超级用户,则需要指定一个不同的数据库用户来执行此操作。对我来说,这是createuser -s rails -U postgres)
使用database.yml中指定的所有者rails创建数据库:
createdb -O rails kt1
(与步骤1中一样,如果您需要指定其他数据库用户来执行此操作,请添加-U)
在此rake db:migrate之后,rspec spec /和rake cucumber应该成功运行。